私は動的SQLクエリを持っています:
SET @a=(SELECT MAX(ID) FROM table);
PREPARE STMT FROM 'SELECT * FROM table ORDER BY id DESC LIMIT 0, ?';
EXECUTE STMT USING @a;
それは期待どおりに正しく機能します。ただし、このクエリから最後の 5 行を減算したいと思います。
そこで、次の 2 つの方法を使用しました。
1-SET @a=(SELECT (MAX(ID)-5) FROM table);
2-SET @a := @a-5;
ここで奇妙なことは、実行されますが、結果はそのままのクエリと何の違いもなく、すべての行がフェッチされるということです!
このトピックに関する説明は本当にありがたいです。
更新 #1
結果が同じであるように、より大きな数20
に変更しても、最後の行にギャップはありません。5
200
アップデート #2
SELECT COUNT(*), MAX(ID) FROM table
&の出力211
_COUNT(*)
577
MAX(ID)
したがって、変更5
すると機能しますが、結果から最初のID400
が除外されます。また、この除外方法は@Laurenceの回答にも当てはまります。 34
アップデート #3
これらの ID をtable
テーブル内の合計行と見なします。
| ID |
+----+
| 55 |
| 54 |
| 53 |
| 52 |
| 51 |
クエリへの以下の変更に関する結果を参照してください (順序は、私が定義した DESC です)。
# @a is MAX(id) = 55
SET @a := @a-5;
=> query: SELECT * FROM table ORDER BY id DESC LIMIT 0, 55-5/*50*/ -- no effects in result
SET @a := @a-50;
=> query: SELECT * FROM table ORDER BY id DESC LIMIT 0, 55-50/*5*/ -- no effects in result
SET @a := @a-51;
=> query: SELECT * FROM table ORDER BY id DESC LIMIT 0, 55-51/*4*/ -- will exclude row `51` from the result so `55, 54, 53, 52` are fetched