5

limit簡単なページネーションを作成しようとしていますが、結果の数に失敗しているようです。

SELECT * FROM visits GROUP by clientID ORDER BY 'date' LIMIT $from, $to

すべてのクライアントの最初の訪問のみを(時系列で)取得し、結果をページングしたいと思います。

$ from = 6、$ to = 12でこのクエリを実行すると、7行ではなく8行のように返されます。

私が間違っているのは何ですか?

4

4 に答える 4

6

MySQLのdocsonLIMIT句から

LIMIT句を使用して、SELECTステートメントによって返される行数を制限できます。LIMITは、1つまたは2つの数値引数を取ります。これらは両方とも非負の整数定数でなければなりません(プリペアドステートメントを使用する場合を除く)。

2つの引数を使用すると、最初の引数は返される最初の行のオフセットを指定し、2番目の引数は返される行の最大数を指定します。最初の行のオフセットは0です(1ではありません)。

$from6と$to12を選択した場合。6から12までを選択していません。=7から始まる12行を選択します。$from + 1

于 2013-02-25T21:39:47.953 に答える
2

LIMIT cluaseの最初の引数は開始オフセットであり、2番目の引数は返される行数です。したがって、クエリは次のようになります。

... LIMIT $from, ($to - $from)
于 2013-02-25T21:35:36.357 に答える
2

使用しているdbmsと構文では、limit式の2番目の数値は、オフセットエンドポイントではなく、許可される結果の数です。つまり、6から始めて、次の12の結果を許可し、結果6〜12は取得しません。

結果を6〜12にしたい場合は、limit 5,7

于 2013-02-25T21:35:40.797 に答える
1

クエリは、日付による最初の訪問を返しません。これを行うには、実際にこの情報に参加する必要があります。

select v.*
from visits v join
     (select clientid, MIN(date) as mindate
      from visits
      group by clientid
     ) vd
     on v.clientid = vd.clientid and v.date = vd.date
order by clientid
limit $from - 1, $to - $from

最初のクエリは、特定のクライアントに関する任意の列のセットを返します。これらの列は、同じレコードからのものであるとは限りません。これは、MySQL(mis)機能を使用しているためです。この機能では、句に含まれておらず、集計関数の引数ではselectない列を句に含めることができます。group by

于 2013-02-25T21:44:13.363 に答える