2012-06-25 2 views
1

У меня есть система обмена сообщений (очень простая), который имеет таблицу, как это:Как сделать запрос на 1 столбец, выбирая из двух столбцов MySQL

**MESSAGE_ID** **RUSER_ID** **SUSER_ID** **MESSAGE_DATA** **DATE** 

Ruser является принимающим пользователем, и SUSER является отправителем. Если бы я хотел, чтобы вывести запрос, который будет выводить определенные пользователям сообщения, я бы себе сделать:

Select * от PRIVATE_MESG где RUSER_ID = $ USER_ID или SUSER_ID = $ USER_ID

Это дало бы мне все MESSAGE_ID-х которые связаны с этим USER_ID. Я хотел бы создать столбец, который будет генерировать только ID, связанный с RUSER_ID или SUSER_ID, связанный с определенным пользователем. Мне это нужно, чтобы выбрать сообщения, которые RUSER_ID или SUSER_ID являются равно USER_ID но отображать только один, который не USER_ID

Я тогда хотел бы сделать группу по выходу из этого запроса ,

Любая помощь очень ценится!

Спасибо!

update Я действительно не ищу message_id, я просто ищу список пользователей, которые этот человек написал или получил от.

ОБНОВЛЕНИЕ Как раз так все знают, я получил ответ на этот вопрос отлично! Я изменил его позже, чтобы он также отображал их по дате от самых новых до самых старых. Я сделал это, разделив DATETIME на DATE и TIME, ИСПОЛЬЗУЯ функцию DATE() и TIME(). Вот мой окончательный запрос:

SELECT 
    IF(RUSER_ID = $USER, SUSER_ID, RUSER_ID) as THE_OTHER_GUY, DATE(DATE) as DAY, TIME(DATE) as TIME 
    FROM PRIVATE_MESG 
    WHERE RUSER_ID = $USER 
OR SUSER_ID = $USER; 
group by THE_OTHER_GUY ORDER BY DAY DESC, TIME DESC 

Надеюсь, это поможет следующему человеку!

ответ

1

Вы можете запросить:

SELECT 
    *, 
    IF(RUSER_ID = $USER_ID, SUSER_ID, RUSER_ID) as THE_OTHER_GUY 
FROM PRIVATE_MESG 
WHERE RUSER_ID = $USER_ID 
    OR SUSER_ID = $USER_ID; 
+0

Это делает работа! Вы знаете, какой из них будет более эффективным? Если или союз? – Linux4Hope

+0

Объединение может быть более эффективным, если у вас есть индексы на RUSER_ID и SUSER_ID, но он может стать очень многословным, если вы хотите вычислить некоторые другие столбцы :) –

+0

Я начинающий программист (18 лет), поэтому я категорически игнорирую термин «индексы» около 100% уверены, что лучший способ описать их. Эти два столбца ссылаются на другую таблицу (USER_ACCOUNTS). Значит ли это, что они являются индексом? Кроме того, ваш ответ действительно помог мне больше узнать о mysql ... Спасибо! – Linux4Hope

0
SELECT SUSER_ID FROM PRIVATE_MESG WHERE RUSER_ID=$USER_ID 
UNION 
SELECT RUSER_ID FROM PRIVATE_MESG WHERE SUSER_ID=$USER_ID 

Он извлекает:
- список идентификаторов пользователей, которые послали сообщения в $ USER_ID
- список идентификаторов пользователей, которые получили сообщения от $ USER_ID

и союзным группирует 2 перечислены в одиночный результирующий набор.

+0

Не Concat объединить их? Например, если RUSER = 11 и SUSER = 12, это будет выглядеть так: 1112? Я не пробовал group_concat только потому, что решил, что это будет похоже на Concat Цените быстрый ответ! – Linux4Hope

+0

Не совсем так, потому что я действительно не ищу message_id, поскольку я всего лишь список пользователей, которые этот человек написал или получил от. – Linux4Hope

+0

это делает! Вы знаете, какой из них будет более эффективным? Если или союз? – Linux4Hope

 Смежные вопросы

  • Нет связанных вопросов^_^