Как сделать запрос в 1 столбец, выбрав из двух столбцов mysql

У меня есть система обмена сообщениями (очень простая), в которой есть такая таблица:

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

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

Выберите * из 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

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


person Linux4Hope    schedule 25.06.2012    source источник


Ответы (2)


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

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;
person Olivier Coilland    schedule 25.06.2012
comment
Это работает! Вы знаете, какой из них будет более эффективным? Если или союз? - person Linux4Hope; 25.06.2012
comment
Объединение может быть более эффективным, если у вас есть индексы для RUSER_ID и SUSER_ID, но оно может стать очень подробным, если вы хотите вычислить некоторые другие столбцы :) - person Olivier Coilland; 25.06.2012
comment
Я начинающий программист (мне 18 лет), поэтому я свободно использую термин «индексы», не будучи уверенным на 100%, что это лучший способ их описать. Эти два столбца ссылаются на другую таблицу (USER_ACCOUNTS). Означает ли это, что они индексные? Кроме того, ваш ответ действительно помог мне больше узнать о mysql... Спасибо! - person Linux4Hope; 25.06.2012
comment
Если вы явно разработали их как ВНЕШНИЕ КЛЮЧИ, MySQL также создал ИНДЕКС. Документация действительно хороша для FOREIGN KEYS и INDEX :) - person Olivier Coilland; 26.06.2012

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.

И UNION группирует 2 списка в один набор результатов.

person Jocelyn    schedule 25.06.2012
comment
Разве Concat не объединяет их? Например, если RUSER=11 и SUSER=12, это будет выглядеть так: 1112 ? Я не пробовал group_concat только потому, что подумал, что это будет похоже на Concat. Спасибо за быстрый ответ! - person Linux4Hope; 25.06.2012
comment
Не совсем так, потому что на самом деле я не ищу message_id, поскольку я просто список пользователей, которым этот человек написал или получил. - person Linux4Hope; 25.06.2012
comment
Это работает! Вы знаете, какой из них будет более эффективным? Если или союз? - person Linux4Hope; 25.06.2012