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