まず、私が使用しようとしているクエリを次に示します。MySQLが期待どおりに動作していない
SELECT * FROM Messages t WHERE perspective_user=? and timestamp BETWEEN ? AND ? AND
timestamp_added =
(select max(timestamp_added) from Messages t2
where
t2.author = t.author AND
t2.body = t.body AND
t2.timestamp = t.timestamp AND
t2.timestamp_added <= ?
) AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?);
コードは次の行がなくても正常に動作しますが、0の結果が返されます。
AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?);
私は、上記の行が基本的なSELECT *クエリでテストされていることを確認しました。また、データベース内に最上位のクエリを満たす行があることを確認しました。
データはSkypeメッセージのログです。ログはランダムに取得されます。目的はデータベースにまだ残っている最新のログを取得することです。目標はSkypeのメッセージをグラフ化して他の楽しいことをすることです。 Skypeは自分のコンピュータ上の古いメッセージをデータベースから削除します。長い "timestamp_added"ステートメントは、最新のログにパージされたデータベースがあった場合でも古いメッセージが残るように、各メッセージの最新のものを取得することです。
のようないくつかのサンプルデータをGROUP_CONCAT()を使いますか? –
サンプルデータとバインドパラメータと期待される出力を提供する必要があります。 – ysth
なぜt2副選択を使用しているのか説明できますか? – ysth