7

一度に「ページ」の結果を取得したい。ページ番号をパラメーター (JDBC 準備済みステートメント内) にしたい。次のスニペットを検討してください

SELECT * FROM thread t ORDER BY t.id LIMIT ((? - 1) * 20), 20

したがって、理想的には、これにより、ページ 1 がLIMIT 0, 20.

私がテストするとき

SELECT * FROM thread t ORDER BY t.id LIMIT ((1 - 1) * 20), 20

構文エラーがあると言われました。それが何であるかはわかりませんが、単純な計算にすぎません。それが教えてくれるのは

エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の '((1 - 1) * 20), 20' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

条項のどこが間違っていLIMITますか?どうすれば修正できますか?

4

3 に答える 3

16

これはできません。

ここで解決策を参照してください: 制限内のMySQL数学とCOUNT(*)

limit 0,20最初のページとlimit 21,202番目のページなどの最初のパラメーター(つまりオフセット)を処理するには、JavaScriptまたは何かを使用することをお勧めし ます。

たとえば、最初のページのURLにget変数がある場合www.example.com?page = 1

offset = (page - 1)*20 ;
row_count = 20;
select * from table limit (offset, row_count);
于 2012-07-30T20:06:37.797 に答える
10

次の構文を使用して、クエリのオフセットを定義します。

SELECT column FROM table 
LIMIT {someLimit} OFFSET {someOffset};

たとえば、ページ #1 (レコード 1 ~ 10) を取得するには、オフセットを 0 に、制​​限を 10 に設定します。

SELECT column FROM table 
LIMIT 10 OFFSET 0;

ページ #2​​ (レコード 11 ~ 20) を取得するには、オフセットを 10 に設定します。制限は 10 です。

SELECT column FROM table 
LIMIT 10 OFFSET 10;
于 2016-10-20T06:17:31.703 に答える
9

MySQL では、その LIMIT 構文に数値定数が必要です。

http://dev.mysql.com/doc/refman/5.7/en/select.htmlから:

LIMIT 句を使用して、SELECT ステートメントによって返される行数を制限できます。LIMIT は 1 つまたは 2 つの数値引数を取ります。これらは両方とも非負の整数定数でなければなりませんが、次の例外があります。

  • プリペアド ステートメント内では、? を使用して LIMIT パラメータを指定できます。プレースホルダー マーカー。

  • ストアド プログラム内では、整数値のルーチン パラメータまたはローカル変数を使用して LIMIT パラメータを指定できます。

Java 側で定数を計算します。

于 2012-07-30T20:03:23.080 に答える