2011-01-03 7 views
0

IDカラムが増分として定義されたテーブルがあります。このテーブルの行は、ここで示すように(SELECT * FROM)より複雑なmysql文でフィルタリングされます。したがって、IDをrownumとして使用することはできません。私が望むのは、選択されたものをフィルタリングした後に、行1であり、この場合は次の10行の後に終了する特定のID(5など)で始まる選択を制限することです。MySQL開始値としてrownumを選択して制限を選択

声明のこの部分が動作します。..

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 

なぜ?

答えて

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構文のセクションを参照してください。

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 

私はそれを1つのステートメントに入れることはできないと思いますか?

関連する問題