[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Объединение результатов двух столбцов
kirik
Должно все быть просто, только что-то в голову ничего не приходит..

Есть запрос типа SELECT `column1`, `column2` FROM `table` WHERE....
Нужно значения колонок `column1` и `column2` объеденить в одну, чтобы были только уникальные значения обеих колонок.

Спасибо!



Спустя 25 минут, 45 секунд (18.12.2008 - 10:55) kirik написал(а):
Пока решил через UNION
SQL
(SELECT `column1` as `column` FROM `table` WHERE....)
UNION
(SELECT `column2` FROM `table` WHERE....)

может есть более короткий способ?

Спустя 1 час, 43 минуты, 45 секунд (18.12.2008 - 12:39) Sylex написал(а):
kirik, вполне приемлимо smile.gif

Спустя 8 часов, 56 минут, 40 секунд (18.12.2008 - 21:35) kirik написал(а):
Sylex, окей, спасибо!)

тогда правильно-ли будет джоинить таблицу к этому результату таким образом? -

SQL
SELECT `t1`.`column1` as `column1`, `t1`.`column2` as `column2`, `t2`.`column1` as `column3`
FROM ( (SELECT `t1`.`column1`, `t1`.`column2` as `column`
FROM `table1` as `t1`
WHERE `t1`.`column3` = 'xxx')
UNION
(SELECT `t1`.`column1`, `t1`.`column3`
FROM `table1` as `t1`
WHERE `t1`.`column2` = 'xxx')
ORDER BY `column1`
) as `t` INNER JOIN `table2` as `t2` ON `t`.`column` = `t2`.`column1`

Спустя 31 минута, 2 секунды (18.12.2008 - 22:06) Sylex написал(а):
мутно как-то выходит...
SQL
WHERE `t1`.`column3` = 'xxx'


т.е. еще 3 поле есть?

Объясни на примере что ты хочешь сделать такое зверское smile.gif

Спустя 5 часов, 11 минут, 31 секунда (19.12.2008 - 03:18) kirik написал(а):
=) Значит сделать хочу "друзей"
есть таблица users { user_id | username | ... } user_id - auto_increament
и есть таблица friends { friendship_id | user_id | friend_id | friendship_date } friendship_id - auto_increament, user_id и friend_id - индекы

Задача стоит следующая - вытащить всех друзей (а именно username-ы) для определенного пользователя.
Так как пользователь как может предлагать дружбу (user_id) так и принимать (friend_id) то его id может быть в 2х колнках - вот зачем понадобилось объеденить их результаты.

SQL
(SELECT `f`.`friendship_id`, `f`.`friend_id` as `friend`
FROM `friends` as `f`
WHERE `f`.`user_id` = 1)
UNION
(SELECT `f`.`friendship_id`, `f`.`user_id`
FROM `friends` as `f`
WHERE `f`.`friend_id` = 1)
ORDER BY `friendship_date`

так собственно вытаскиваем всех друзей для юзера с id = 1

теперь нужно вытащить username для каждого друга -
SQL
SELECT `t`.`friendship_id` as `friendship_id`, `t`.`friend` as `friend`, `u`.`username` as `username`
FROM ((SELECT `f`.`friendship_id`, `f`.`friend_id` as `friend`
FROM `friends` as `f`
WHERE `f`.`user_id` = 1)
UNION
(SELECT `f`.`friendship_id`, `f`.`user_id`
FROM `friends` as `f`
WHERE `f`.`friend_id` = 1)
ORDER BY `friendship_date`
) as `t` INNER JOIN `users` as `u` ON `t`.`friend` = `u`.`user_id`


впринципе такой запрос работает, но хотелось бы узнать, насколько правильно он составлен =)

Спустя 6 часов, 58 минут, 37 секунд (19.12.2008 - 10:17) Sylex написал(а):
kirik, не понимаю тебя... а так типа не работает?

SQL
SELECT f.friendship_id, f.friend_id, u.username
FROM friends f
JOIN users u
WHERE u.user_id = 1 AND (u.user_id = f.friend_id OR u.user_id = f.friendship_id)

Спустя 8 минут, 56 секунд (19.12.2008 - 10:26) Sylex написал(а):
или даже

SQL
SELECT f.friendship_id, f.friend_id, u.username
FROM friends f
JOIN users u
WHERE u.user_id = 1 AND ( f.friend_id = 1 OR f.friendship_id = 1)

Спустя 36 минут, 9 секунд (19.12.2008 - 11:02) kirik написал(а):
точнее так, наверное
SQL
SELECT f.friendship_id, f.friend_id, u.username
FROM users_friends f
JOIN users u
WHERE u.user_id = 1 AND ( f.friend_id = 1 OR f.user_id = 1)

но это не совсем то.. в итоге для юзера с id = 1 должен получиться массив вида
Код
friendship_id => 1, friend_id => 3
friendship_id => 2, friend_id => 4
...

тоесть для этого юзера должны вытащиться все строки из таблицы friends где он или user_id (предложил дружбу), или friend_id - принимает дружбу.

а такой запрос выдает только friend_id, тоесть если этот юзер присутствует в строке как friend_id (принимающий дружбу), то выведется егоже id, а должен вывестись user_id (айдишник юзера, который предложил дружбу)..

сейчас пока работает решение с Union-ом, и последующим Join-ом..)
может тогда не стоит парится в поисках другого запроса..=)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.