繁体   English   中英

如何不使用LIMIT限制查询结果

[英]How can I limit query's results without using LIMIT

我需要在网格上显示有序的20条记录,但是由于生成器(脚本)使用LIMIT来显示每页行数,因此无法使用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()方法是使用group_concat()和order by来获取按asc / desc和substring_index排序的ID列表,以选择所需的ID,就像您需要20条记录,然后使用find_in_set与同一个表find_in_set ,但是这种解决方案将非常昂贵在性能和group_concat限制方面,如果您需要超过20条记录

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

SELECT中的SELECT呢?

SELECT *
   FROM (
       -- there put your query
       -- with LIMIT 20
   ) q

因此外部SELECT没有LIMIT,您的生成器可以添加自己的。

在脚本格网中,可以使用Limit。 这是一个有效的SQL查询,仅从表中选择前20条记录。 网格设置为每页仅显示10条记录,因此它将显示20条结果,共2页:

SELECT 
    ProductID,
    ProductName
FROM 
    Products
LIMIT 20

同样,包含的查询也可以很好地工作:

SELECT 
    ProductID,
    ProductName
 FROM 
    (SELECT 
    ProductID,
    ProductName
  FROM Products  LIMIT 20) tmp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM