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 行,当使用不同的发送方和接收方组合时,如果行数少于我得到的结果少于 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

而且您不需要第二个 LIMIT,因为您只能从子查询中获得 10 个结果。

于 2012-04-11T17:46:24.823 回答