メッセージを保持するテーブルとユーザーを保持するテーブルがあります。user_id 1 とやり取りした (メッセージを送受信した) すべてのユーザーを取得したい。このクエリは次のように機能します。
http://sqlfiddle.com/#!2/6a2f3/1
編集:
SELECT DISTINCT
(CASE WHEN `user_to_id` = 1 THEN `user_from_id` ELSE `user_to_id` END) `user_id`,
users.*
FROM `messages`
INNER JOIN users
ON (CASE WHEN `user_to_id` = 1 THEN `user_from_id` ELSE `user_to_id` END) = users.user_id
WHERE `user_to_id` = 1 OR `user_from_id` = 1
ORDER BY `time` DESC
しかし、列を SELECT に追加すると、message
重複したレコードが返されます。
http://sqlfiddle.com/#!2/6a2f3/2
編集:
SELECT DISTINCT
(CASE WHEN `user_to_id` = 1 THEN `user_from_id` ELSE `user_to_id` END) `user_id`,
`messages`.`message`,
users.*
FROM `messages`
INNER JOIN users
ON (CASE WHEN `user_to_id` = 1 THEN `user_from_id` ELSE `user_to_id` END) = users.user_id
WHERE `user_to_id` = 1 OR `user_from_id` = 1
ORDER BY `time` DESC
どうすれば修正できますか?
また、「DISTINCT」の選択が行われた後に結果を並べ替えていることがわかります。message_id
2の行には 3 があるため、最初のクエリは結果を反転して返す必要time
があります。「DISTINCT」の前に並べ替える方法はありますか?
編集 2: 質問について明確ではありませんでした。一致した user_id の最後のメッセージのみを選択したい。