1

これが、私が書いているアプリのメッセージ モジュールから削除されたテーブルです。

次のコマンドを実行すると、期待どおりに動作します

SELECT * FROM messages WHERE to_user = 1 OR from_user = 1 GROUP BY from_user

戻り値

ドラマは、2 | のインスタンスを 1 つだけにしたいということです。1 または 1 | 2 、私のアプリでは、メッセージを送信したユーザー名に基づいてメッセージをグループ化しようとしているためです。OR 句なしで試してみましたが、1 が 2 にメッセージを送信すると、2 からの返信を受け取るまでメッセージは表示されません。1 と 2 は php 変数から動的です

4

4 に答える 4

3

ユーザー名でグループ化しているので、ユーザー ID の有効なリストを 1 つ選択します。

SELECT DISTINCT from_user FROM messages WHERE to_user = 1 
UNION
SELECT DISTINCT to_user FROM messages WHERE from_user = 1 

重複を気にしない場合はUNION ALL、削除するDISTINCTとパフォーマンスが向上します。

于 2012-09-14T21:10:20.170 に答える
2
  1. クエリ結果に集計フィールドと非集計フィールドを含めることはできません。
  2. 関数を使用してタプル(to_user、from_user)を形成できます。

    SELECT DISTINCT IF(from_user < to_user, from_user, to_user) AS first,
                    IF(from_user < to_user, to_user, from_user) AS second
    FROM   messages
    

(もちろん、テストされていません)。

于 2012-09-14T21:12:24.053 に答える
1

これは少しトリッキーですが、私にとってはうまくいきます。

SELECT n.f, n.t
FROM
  (SELECT DISTINCT m.from_user AS f, m.to_user AS t
   FROM messages AS m
   WHERE (m.from_user = 1
          OR m.to_user =1)) AS n,
  (SELECT DISTINCT m.from_user AS f, m.to_user AS t
   FROM messages AS m
   WHERE (m.from_user = 1
          OR m.to_user =1)) AS m
WHERE n.f = m.t
  AND m.f = n.t
  AND n.f < m.f;
于 2012-09-14T22:34:21.210 に答える
-1

追加できます

HAVING to_user < from_user 
于 2012-09-14T21:11:57.650 に答える