「アイテム」のテーブルと「アイテムキーワード」のテーブルがあります。ユーザーがキーワードを検索するとき、結果の 1 ページと結果の総数をユーザーに提供したいと考えています。
私が現在行っていることは(「ab c」を検索するユーザーの場合:
SELECT DISTINCT {fields I want} FROM itemkeywords JOIN items
WHERE (keyword = 'a' or keyword='b' or keyword='c'
ORDER BY "my magic criteria"
LIMIT 20.10
そして、カウントで同じクエリを実行します
SELECT COUNT(*) FROM itemkeywords JOIN items
WHERE (keyword = 'a' or keyword='b' or keyword='c'
これはかなり大きなテーブルを取得する可能性があり、このソリューションは非常に悪いと思います...
しかし、これ以上良いものは思いつきません。
MySQL を 2 回ヒットすることを回避するための明白な代替手段は、LIMIT 句なしで最初のクエリのみを実行し、次に正しいレコードに移動して対応するページを表示し、次に結果をカウントするためにレコードセットの最後に移動するようですさらに悪いことに...
何か案は?
注: PHP ではなく、ASP.Net と MySQL を使用しています。