1

MySQL クエリの行番号を取得するために必要なクエリの Stack Oveflow でいくつかの例を見てきました。私がやりたいことは、それを少し拡張して、行番号が 2 つの値の間にある結果のセットを制限できるようにすることです。これにより、結果テーブルのページネーションが可能になります。

私がこれまでに持っているクエリは次のとおりです。

SELECT l.ID, l.Name, l.Value, @curRow := @curRow + 1 AS row_number
FROM (
  SELECT * FROM $table
  ORDER BY Name ASC
) l
JOIN (
  SELECT @curRow := 0
) r
WHERE row_number BETWEEN 1 AND 3

このクエリは、最後に WHERE 句を追加するポイントまで機能し、unknown column row_number というエラーが表示されます。テーブルにlという名前を付けたからかもしれないと思ったので、WHERE l.row_number BETWEENで試してみましたが、同じ問題が発生しました。

行番号が2つの値の間にあるクエリを制限する方法を誰かが提案できますか、または同じ目的に役立つ代替クエリを提案できますか?

4

2 に答える 2

4

SELECT * FROM your_table LIMIT 5, 5

これにより、レコード 6、7、8、9、および 10 が表示されます。

于 2013-08-19T10:24:27.917 に答える
0

少し醜いですが、これが私が持っているものです:

SELECT * FROM (
    SELECT l.ID, l.Name, l.Value, @curRow := @curRow + 1 AS row_number 
    FROM (
        SELECT * FROM $table 
        ORDER BY Name ASC
    ) l 
    JOIN (
        SELECT @curRow := 0
    ) r
) t 
WHERE row_number BETWEEN $start AND $end

そのため、テーブルからすべてのフィールドを名前順に選択しています。次に、そのクエリからフィールドのサブセットを取得し、返された各行の行番号を取得しています。次に、その結​​果セットに対して 3 番目の SELECT クエリを実行して、row_number が 2 つの値の間にある行を取得します。次に、最も外側の SELECT ステートメントを削除するだけで、返される行の総数を取得できます。

私が言ったように、醜いが機能的です。誰かがこれを整理する方法を提案できれば、それは素晴らしいことです。

于 2013-08-19T13:48:29.097 に答える