2

私はメッセージング システムをコーディングしています。昇順で送信された最後の 10 件のメッセージを選択しようとしています (一番下が最新)。

ただし、これを行うには問題があります:(

これは私の現在の SELECT ステートメントで、テーブルに 30 行以上あります。

SELECT * FROM 
( SELECT * FROM messages ORDER BY addedDate DESC LIMIT 10 ) tb 
WHERE ( senderID = "1" OR receiverID = "1" ) 
AND ( senderID = "3" OR receiverID = "3" ) 
ORDER BY addedDate ASC LIMIT 10

ただし、何らかの理由で、送信者と受信者の異なる組み合わせを使用すると、7行未満の結果が得られますが、それぞれが少なくとも10行を取得する必要があります。

一致する下位10行を取得するために使用できる別の方法はありますか:

WHERE ( senderID = "1" OR receiverID = "1" ) 
AND ( senderID = "3" OR receiverID = "3" ) 

ただし、昇順で下位 10 を選択します。

4

1 に答える 1

4

メインクエリではなく、サブクエリにWHEREステートメントを含める必要があります。

これを試して:

SELECT * FROM 
( SELECT * FROM messages
  WHERE ( senderID = "1" OR receiverID = "1" ) 
  AND ( senderID = "3" OR receiverID = "3" )
ORDER BY addedDate DESC LIMIT 10 ) tb 
ORDER BY addedDate ASC

また、サブクエリから10件の結果しか得られないため、2番目のLIMITは必要ありません。

于 2012-04-11T17:46:24.823 に答える