mysql - 在MYSQL中选择底部结果

标签 mysql select

我正在编写一个消息系统,我试图选择按升序发送的最后 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/

相关文章:

php - MYSQL 查询计算每小时耗时

mysql - 如何使用 ORDER BY 计算行数直到某个值

mysql - 合并两个相似结构的表

MYSQL动态表名选择连接和条件

sql - oracle提高查询性能

php - Codeigniter 在 View 问题中显示私有(private)消息?

php - 在大数据集上运行whereHas laravel方法会导致mysql崩溃

MySQL::从逗号分隔的字符串中选择

mysql - 有没有办法在计算时间间隔时不改变 varchar 的类型?

SQL 选择单独行上每个选定列的值