0

テーブル:

+----+----------+-----------+---------+
| id | topic_id | from_user | to_user |
+----+----------+-----------+---------+
|  6 |        5 | 4         | 5       |
|  2 |        6 | 5         | 2       |
|  3 |        5 | 2         | 5       |
|  4 |        4 | 5         | 4       |
|  5 |        4 | 5         | 4       |
|  7 |        6 | 5         | 2       |
|  8 |        5 | 2         | 5       |
|  9 |        5 | 4         | 5       |
| 10 |        0 | 2         | 5       |
| 11 |        6 | 5         | 2       |
| 12 |        3 | 5         | 2       |
| 13 |        0 | 5         | 2       |
+----+----------+-----------+---------+

これはメッセージ テーブル (プライベート メッセージのようなもの) です。from_user と to_user は自己記述的です。この目的では topic_id は重要ではありません。

ここで、現在ログインしているユーザーの受信トレイに表示するメッセージのリストを選択する必要があります。このユーザーをセッション変数で参照します$this_user = $_SESSION['id']

私はこのクエリを持っています:

SELECT * 
FROM messages 
WHERE from_user = '$this_user' OR 
      to_user = '$this_user' 

ただし、これには 4 - 5、5 - 4、5 - 4、

私はDISTINCTで試しましたが、どちらもうまくいきません

任意の助けが必要

4

4 に答える 4

2

これを試してみてください

select least(from_user, to_user) as x, greatest(from_user, to_user) as y
from   tableName
WHERE  from_user = '$this_user' OR to_user = '$this_user'
group by x, y
于 2012-11-08T15:09:33.580 に答える
2

DISTINCT (クエリを表示) をどのように使用したかはわかりませんが、代わりにこれも機能するはずです。

SELECT * FROM messages 
   WHERE from_user = '$this_user' OR to_user = '$this_user'
   GROUP BY `id`
于 2012-11-08T15:06:52.260 に答える
2

使用するUNION ALL

SELECT 'From You' type, * FROM messages m WHERE from_user = '$this_user'
UNION ALL
SELECT 'To You', * FROM messages m WHERE to_user = '$this_user'

SQL フィドルのデモ

于 2012-11-08T15:07:16.800 に答える
1

topic_id確かに、列のグループ化を利用する必要がありますか?次のようなクエリを使用します。

SELECT * FROM messages
WHERE from_user = '$this_user' OR to_user = '$this_user'
GROUP BY `topic_id`

あなたが探していると私が信じる結果を私に与えてくれます。例については、このSQLFiddleを参照してください。

于 2012-11-08T15:23:41.443 に答える