Использование результата CASE в операторе LEFT JOIN (MySQL) - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь присоединиться к таблице на основе результата CASE. По сути, я хочу проверить, являюсь ли я отправителем, а если нет, я хочу получить имя отправителя из базы данных пользователей. Если я ЕСМЬ отправитель, я хочу получить имя получателя из таблицы пользователей.

Вот мой текущий запрос к базе данных, он правильно извлекает информацию, но имя пользователя users.user AS AS sendername всегда будет отображать:

SELECT DISTINCT CASE WHEN $userid != senderid THEN senderid ELSE recipients END someid,   
                users.username AS sendername, 
                messages.body, 
                messages.time 
FROM messages 
LEFT JOIN users ON users.id = messages.senderid 
WHERE messages.recipients = $userid 
OR messages.senderid = $userid 
ORDER BY messages.time

Я бы хотел изменить это на эквивалент следующего: LEFT JOIN users ON users.id = someid где someid определен в приведенном выше случае.

Спасибо!

1 Ответ

2 голосов
/ 12 апреля 2011
SELECT DISTINCT CASE WHEN $userid != senderid THEN senderid ELSE recipients END someid,   
                CASE WHEN $userid != senderid THEN senders.senderid ELSE receivers.recipients END somename
                messages.body, 
                messages.time 
FROM messages 
LEFT JOIN users AS senders ON messages.senderid = senders.id
LEFT JOIN users AS receivers ON messages.recipients = receivers.id
WHERE messages.recipients = $userid 
OR messages.senderid = $userid 
ORDER BY messages.time

Вам может понадобиться настроить этот SQL, чтобы получить именно то, что вы хотите, но суть его состоит в том, чтобы соединиться дважды, а затем использовать оператор case, чтобы извлечь нужный элемент из соответствующей таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...