行のセットを返すクエリがあります。私はLIMIT
に、範囲の先頭または末尾のどちらかに相対して、これらの行のいくつかのサブセットに実際に何が返されるのかを知りたいと思います。範囲が初めとの相対的なものであれば、これを簡単に行うことができます。例えば、私は私が行うことができます行5-7を返したい場合:MySQLの行の範囲を結果セットの先頭または末尾に戻します
SELECT * FROM <table> WHERE <condition> ORDER BY rowid ASC LIMIT 5,2
私が行う必要がある唯一の翻訳は、(index0,index1)
からoffset,length
どこoffset=index0
とlength=index1-index0
にあります。
しかし、1つのクエリで範囲の終わりを基準にして範囲を指定できるようにしようとしています。つまり、最初にクエリを実行して行数を決定し、次にこの情報に基づいて2番目のクエリを実行しません。たとえば、(-5,-1)
の行範囲を指定すると、これは最後の5行が返されることを意味します。私はLIMIT
に負の値を渡すことはできません。
類似の質問を読む際に、1つの提案された解決策がクエリのORDERを変更するように思われました。だから私はできると思う:
SELECT * FROM <table> WHERE <condition> ORDER BY rowid DESC LIMIT 1,5
今私は2つの問題があります。最初に、返されたセットの順序が間違っていますが、私はまだそれを昇順で返します。だから今私はすべての順序を変更するには、サブクエリを持っている必要があります:それよりも、それを行うには良い方法があるかどう
SELECT * FROM (SELECT * FROM <table> WHERE <condition> ORDER BY rowid DESC LIMIT 1,5) AS x ORDER BY x.rowid ASC;
は私はわからないんだけど、第二の問題があります:これは、開始場合は動作しません。範囲の終わり部分は、相対的なものとして混在しています。 10番目から最後までのすべての行である範囲(10,-2)
を返すとします。この場合、上記のアプローチのどちらも機能しません。
また、使用方法の例SQLはありませんが、mysql_num_rows()
はmentionedでした。
SELECT * FROM <table> WHERE <condition> ORDER BY rowid DESC LIMIT 10,mysql_num_rows()-2;
しかし、私はこのクエリを実行しようとすると、私はこのエラーを取得する:
ERROR 1327 (42000): Undeclared variable: mysql_num_rows
mysql_関数は償却されます。代わりにmysqli_を使用してください。 –
@SloanThrasher 'ERROR 1327(42000):宣言されていない変数:mysqli_num_rows' – Michael
http://php.net/manual/en/mysqli-result.num-rows.php - 単純なGoogle検索を1回実行しました。 –