1

要素とキーワードを含む MySQL DB があります。誰かがキーワードで要素を検索すると、膨大な数のヒットが得られる可能性があります。一致するすべての要素を返すのではなく、m 要素の n 番目のグループを返すのと同じことをしたいと思います。これにより、最初の m 個の一致する要素を表示してから、次の m 個の一致する要素を取得して表示することができます。

具体的な例として、画像の DB があり、キーワード「ball」を使用して検索し、合計 500 件の一致があるとします。DB にクエリを実行して、最初の 50 件、次に 2 番目の 50 件などを返したいとします。要素の順序が (ORDER BY を使用して) 決定論的であると仮定すると、それらの一致する要素のサブセットをサブ選択する方法がわかりません。

助けてくれてありがとう。

4

2 に答える 2

1

クエリに LIMIT 条件を追加すると、結果の数と結果のオフセットを指定できます。

例:

SELECT * FROM table WHERE keyword = 'ball' LIMIT 0, 50

これにより、結果オフセット 0 から始まる最初の 50 件の結果が得られます。

次の 50 を取得するには、これを次のように変更します。

SELECT * FROM table WHERE keyword = 'ball' LIMIT 50, 50

これにより、結果オフセット 50 から始まる 50 個の結果が得られます。

通常、ページネーション (結果セットのページ 1、2、3 を提供する) をコーディングするときは、開始したいオフセットを URL に渡します。これにより、同じクエリを実行して異なるオフセットから開始する結果を取得できます。

于 2012-12-12T17:46:29.043 に答える
0
SELECT keyword, otherfield from table
WHERE keyword LIKE '$keywordvar%'
ORDER BY whatever ASC

次に、LIMIT 句を使用します。

クエリを最初の 50 件に制限するには、次を使用します。

LIMIT 50;

クエリを 2 番目の 50 に制限するには、次を使用します。

LIMIT 50, 50;

クエリを 3 番目の 50 個に制限するには、次を使用します。

LIMIT 100, 50;

値をより大きなセットまたはより小さなセットに変更できます。最終的なクエリは次のようになります。

SELECT keyword, otherfield from table
WHERE keyword LIKE '$keywordvar%'
ORDER BY whatever ASC
LIMIT 50;

または、ワイルドカード検索を使用せず、特定のキーワード値を探している場合:

SELECT keyword, otherfield from table
WHERE keyword = 'ball'
ORDER BY whatever ASC
LIMIT 50;
于 2012-12-12T17:58:15.730 に答える