如何仅使用(My)SQL使限制偏移动态化

时间:2011-05-03 16:30:43

标签: mysql sql limit

此代码不起作用

select pagenr into @offset from pages where id = 3;
select * from table1 limit @offset*10, 10;

我需要使用什么SQLcode才能使这种代码工作 使用 SQL!

请注意

SET SQL_SELECT_LIMIT = @count 

不起作用,因为我主要关注偏移,而不是限制。

1 个答案:

答案 0 :(得分:4)

从MySQL 5.5规范:

  

可以使用LIMIT子句   约束返回的行数   通过SELECT声明。 LIMIT需要   一个或两个数字参数,其中   必须都是非负整数   常数,除了以下例外:

     
      
  • 在准备好的陈述中,LIMIT参数可以使用?指定   占位符标记。
  •   
  • 在存储的程序中,可以使用指定LIMIT个参数   从MySQL 5.5.6开始的整数值例程参数或局部变量。
  •   

因此,在存储过程中,以下内容可以正常工作:

DECLARE offset bigint
SELECT pagenr * 10 INTO offset FROM pages where id = 3;
SELECT * FROM table1 LIMIT offset, 10;

否则,您需要预先计算该值并通过查询传入。您应该已经知道页面大小和页码,所以这应该不难。