メッセージング システムを開発していますが、クエリ (MYSQL) を書き留めるのに問題があります。簡単に言うと、クエリは、ユーザー間の会話ごとに 1 つの最後のメッセージの配列を返す必要があります。
CREATE TABLE 'tbl_message'('id' int(10) AUTO_INCREMENT,
'from_user' int(10),
'to_user' int(10),
'reply_to' int(10),
'subject',
'body' text,
'status' tinyint(3),
'deleted_from_sender' tinyint(3),
'deleted_from_recipient' tinyint(3)',
'created_on' datetime,
私はクエリを書きました:
SELECT * FROM tbl_message s1 WHERE s1.created_on IN (
SELECT MAX(s2.created_on)
FROM tbl_message s2 WHERE s1.from_user=".$userID." OR s2.to_user=".$userID."
GROUP BY s2.from_user, s2.to_user)
AND status = 0";
これは正常に動作しますが、from_user と to_user の両方からの 1 つの最後のメッセージではなく、2 つの最後のメッセージが表示されます。もちろんGROUP BYのおかげで、サブクエリで最大のcreated_on(実際にはmysqlの日付スタンプ)をどのように見つけることができるかという問題がありますか?または、他の解決策をいただければ幸いです。助けやアドバイスをいただければ幸いです。
2 日後、stackoverflow と mysql のマニュアルを掘り下げて、DB 教授からの助けを期待しています:)
UPD:たとえばいくつかのデータ
+----+-------+--------+--------+---------------------+--------+---------+
| id | from_user | to_user | subject | created_on | status |
+----+-------+--------+--------+---------------------+--------+---------+
| 1 | 68 | 128 | somesubject1 | 2013-07-01 21:31:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
| 2 | 128 | 68 | somesubject2 | 2013-07-01 21:41:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
| 3 | 128 | 68 | somesubject3 | 2013-07-01 21:51:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
| 4 | 68 | 226 | somesubject4 | 2013-07-01 22:01:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
クエリの出力
| 3 | 128 | 68 | somesubject3 | 2013-07-01 21:51:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
| 4 | 68 | 226 | somesubject4 | 2013-07-01 22:01:29 | 0 |