我正在编写一个消息系统,我试图选择按升序发送的最后 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 个。
最佳答案
您应该在子查询中使用 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 个结果。
关于mysql - 在MYSQL中选择底部结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10111179/