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

时间:2014-09-14 18:31:49

标签: mysql limit

我需要在我的网格上显示有序的20条记录,但我不能使用LIMIT,因为我的生成器(Scriptcase)使用LIMIT来显示每页的行数。它是发电机的错误,但我需要为我的项目解决它。那么有可能从我的表中查询20个有序记录吗?

3 个答案:

答案 0 :(得分:1)

从评论开始,如果您不能使用限制,那么您可以根据某些订单对结果进行排名,并在父选择过滤器中按排名限制结果

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.

另一种hackish方式是使用group_concat()和order by来获取在asc / desc和substring_index上排序的id列表以选择所需的id,就像你需要20条记录然后使用同一个表加入find_in_set,但如果您需要超过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

答案 1 :(得分:0)

SELECT中的SELECT怎么样:

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

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

答案 2 :(得分:0)

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

SELECT 
    ProductID,
    ProductName
FROM 
    Products
LIMIT 20

此外,受欢迎的查询效果还不错:

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