通过选择rownum作为起始值来限制MySQL

时间:2011-01-03 12:31:58

标签: mysql

我有一个带有ID列的表,该列被定义为增量。这个表的行被一个更复杂的mysql语句过滤,如下所示(SELECT * FROM),因此我不能将该ID用作rownum。我想要的是在过滤之后限制选择,从给定的ID(例如5)开始,这可能是第1行,在这种情况下是在接下来的10行之后结束。

这部分声明正在发挥作用..

SELECT temp.rank 
FROM (
  SELECT @rownum := @rownum+1 rank, f.* FROM function f, (SELECT @rownum :=0) r
) temp
WHERE IDFunc = 5

但复杂的包括LIMIT而不是..

SELECT *
FROM function 
LIMIT (
  SELECT temp.rank 
  FROM (
    SELECT @rownum := @rownum+1 rank, f.* FROM function f, (SELECT @rownum :=0)r
  ) temp
  WHERE IDFunc = 5
), 10

为什么?

2 个答案:

答案 0 :(得分:1)

同样的原因

mysql> select * from t limit (select 1);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(select 1)' at line 1

失败:mysql似乎不支持限制中的表达式。

但是你可以使用局部变量,这可能会给你你需要的东西。请参阅http://dev.mysql.com/doc/refman/5.1/en/select.html语法,特别是有关LIMIT语法的部分。

答案 1 :(得分:0)

我可能已经猜到了。

那么本地变量如何在mysql中运行?应该是这样的吗?

SELECT @row := 
SELECT temp.rank
FROM (
  SELECT @rownum := @rownum+1 rank, f.* FROM function f, (SELECT @rownum :=0)r
) temp WHERE IDFunc = 1); 
SELECT * 
FROM function 
LIMIT @row, 10

我想我不能把它放在一个声明中?!