我有一个带有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
为什么?
答案 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
我想我不能把它放在一个声明中?!