0

私は初心者の MySQL プログラマーで、ユーザー間でメッセージを送信できる単純な Web サイトを作成しようとしています。

messageメッセージは、ユーザーからユーザーへの日付、テキスト、件名、およびインデックスとともに、という 1 つのテーブルに格納されます。touインデックスは主キーですが、 (ユーザーへの)セクションでソートしたいと思います。

JOIN1 つのテーブル内で SQL 構文を使用して並べ替えることができるかどうか疑問に思っていました。すべてのメッセージをループし、毎回このクエリを実行して一致を見つけます。

SELECT message.text
FROM message
LEFT JOIN message
ON message.tou = [this one's to users]

私は非常に高度なプログラマーではなく、JOIN構文に慣れていないので、可能であれば、これを希望どおりに使用する方法を教えてください。このような質問がたくさんあることは知っているので、私の質問を解決する質問がある場合は、私もその質問にリダイレクトしてください。

また、不明な点があれば教えてください。

次の出力を取得しようとしています。

message次の行がある場合:

INDEX | TOU        | FROMU | TEXT
1     | u1, u2     | u4    | hello from u4
2     | u1, u3     | u3    | hello from u3
3     | u1, u2     | u5    | hello from u5
        ^ organize this row

次のように整理するように整理したいと思います。

TOU    | TEXT
u1, u2 | hello from u4
       | hello from u5
u1,u3  | hello from u3

前もって感謝します。

4

1 に答える 1

1

これでできます。

SELECT tou, text
FROM (
    SELECT IF(tou = @lasttou, '', tou) tou, text, @lasttou := tou
    FROM (SELECT tou, text
          FROM message
          ORDER by tou) message,
         (SELECT @lasttou := NULL) vars
) x

ORDER BY必要な順序で行を取得します。次に、行間で繰り返されるときに@lasttou同じ値を表示しないようにするために使用します。tou

実際には、SQL ではなく、ユーザー インターフェイスに使用されているアプリケーション言語でこの重複抑制を実装します。

SQLFIDDLE

于 2013-09-13T23:24:59.470 に答える