mysql - 如何在不使用 LIMIT 的情况下限制查询结果

标签 mysql limit

我需要在网格上显示有序的 20 条记录,但我无法使用 LIMIT,因为我的生成器(Scriptcase)使用 LIMIT 来显示每页的行数。这是生成器的错误,但我需要为我的项目解决它。那么是否可以通过查询显示我的表中的 20 条有序记录?

最佳答案

从评论来看,如果您不能使用限制,那么您可以根据某种顺序对结果进行排名,并在父选择过滤器中按排名数字限制结果

select * from (
select *
,@r:=@r + 1 as row_num
from your_table_name
cross join (select @r:=0)t
order by some_column asc /*  or desc*/
) t1 
where row_num <= 20

Demo with rank no.

另一种黑客方法是使用 group_concat() 和 order by 来获取按 asc/desc 排序的 id 列表,并使用 substring_index 来选择您需要的所需 id然后使用 find_in_set 将 20 条记录连接到同一个表,但是如果您需要超过 20 条记录,则该解决方案在性能和 group_concat 限制方面将非常昂贵

select t.* 
from your_table_name t
join (
select 
substring_index(group_concat(id order by some_column asc),',',20) ids_list
from your_table_name
  ) t1 on (find_in_set(t.id , t1.ids_list) > 0)

Demo without rank

关于mysql - 如何在不使用 LIMIT 的情况下限制查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25836632/

相关文章:

mysql - 并发插入 mysql - 在第一组插入完成之前调用相同的插入存储过程

mysql - 如何仅选择包含 mySQL 中另一组的部分或全部的特定组

mysql - 在两个日期范围之间更新表内的列时,组函数的使用无效

mysql - 安装mysql shellscript并设置root密码

java - 为 int 值设置限制

mysql - 两个不同应用程序之间的 M2M

javascript - 可以统一处理全范围MIN和MAX_SAFE_INTEGER的randomInt函数

Postgresql:按分区键排序的查询

firebase-cloud-messaging - Firebase 云消息传递中的 "Subject to frequency limit"标签是什么

Mongodb 在内存不足时终止