我需要在网格上显示有序的 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
另一种黑客方法是使用 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)
关于mysql - 如何在不使用 LIMIT 的情况下限制查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25836632/