我正在编写一个邮件系统,我正在尝试选择按升序发送的最后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小于7的结果,即使每个应该给我至少10行我想要的。
我是否可以使用另一种方法来获得匹配的底部10行:
WHERE ( senderID = "1" OR receiverID = "1" )
AND ( senderID = "3" OR receiverID = "3" )
但按升序选择底部10。
答案 0 :(得分: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个结果。