메시지를 보냈 든 수신 했든 관계없이 두 명의 사용자간에 첫 번째 메시지를 반환하려고합니다. 모든 올바른 스레드를 반환하는 아래의 쿼리를 코딩했습니다 있지만 DISTINCT 절을 무시하는 것 - 그리고 같은 'someid'함께 여러 결과가 끝납니다.CASE 문 다음에 SELECT DISTINCT가 작동하지 않습니다.
결과 'someid'열에 중복 값이 반환되지 않도록이 쿼리를 어떻게 수정합니까?
는 여기에 내가 현재 사용하고있는 작업은 다음과 같습니다 @Mitch 밀이 언급 한 바와 같이
SELECT DISTINCT CASE WHEN $userid != senderid THEN senderid ELSE GROUP_CONCAT(receivers.id SEPARATOR ', ') END someid,
CASE WHEN $userid != senderid THEN senders.username ELSE GROUP_CONCAT(receivers.username SEPARATOR ', ') END somename,
messages.body,
messages.time
FROM messages
LEFT JOIN messages_recipients AS recipients ON messages.id = recipients.messageid
LEFT JOIN users AS senders ON messages.senderid = senders.id
LEFT JOIN users AS receivers ON recipients.userid = receivers.id
WHERE recipients.userid = $userid
OR messages.senderid = $userid
GROUP BY messages.id
ORDER BY messages.time DESC
내 생각에 당신은 2 개의 쿼리로 나누어야 할 것입니다. 내면의 하나의 performng 인 Something on distinct ... –
어디에서 그 쿼리를 넣을까요? – Walker