1

この特定の問題を処理する方法について少しアドバイスを探しています。

クエリにlimitステートメントを含む特定の基準に基づいて50データベース行をphpページに返すページがあります。

問題は、完全なクエリから統計を取得する必要があることです。

基本的に、データベースには10000のエントリがあり、そのうち6000がこれで、3000がそれであるとユーザーに伝える必要がありますが、上位50のみが表示されます。

私のphpコードは、50で停止するクエリに基づいているため、数値を不正確に報告しています。

私はこれを処理するための最良の方法を見つけようとしています。

パフォーマンス上の理由から、2つのクエリを実行するのは賢明ではないと思います。代わりにカウントクエリを実行する方が、パフォーマンスにとってより費用効果が高いでしょうか?

または、完全なクエリを実行する必要がありますが、whileループを中断して出力を50に制限するだけですか?

どのように処理するのが最善ですか?ありがとう。

4

6 に答える 6

5

SQL_CALC_FOUND_ROWSこのように使用できます

SELECT `SQL_CALC_FOUND_ROWS` * FROM table_name limit 0,5;

LIMIT句を適用する前に行数を取得します。

http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows

于 2013-03-01T05:50:46.663 に答える
2

カウントを取得するには:

SELECT COUNT(*) FROM table WHERE criteria

50 レコードを取得するには

SELECT columns FROM table WHERE criteria LIMIT 0, 50
于 2013-03-01T05:51:08.193 に答える
0

I don't think it would be wise to run 2 queries for performance reasons. Would it be more cost effective for performance to maybe run a count query instead?

完全なカウントを取得するには1つのクエリを実行し、次に50レコードのデータを取得するには別のクエリを実行する必要があります。1つのクエリを実行してすべてのデータを取得し、50個だけを表示することは絶対にしないでください。マートからチョコレートを1000個購入して家に帰り、5個だけ食べて残りを投げるのと同じように、コストがかかります。

于 2013-03-01T05:47:31.530 に答える
0

特定のクレテリアのカウントに興味がある場合は、確かに個別のカウントクエリを実行します。それ以外の場合は、数を超える必要がある場合は、エンドクエリを実行できる興味深いデータを含むビューを作成することを検討する必要があります。 1つと50までも数えます。

于 2013-03-01T05:49:38.583 に答える
0

統計データのみを含むビュー テーブルを作成する

Create view name as "query that you want" 

そして、統計については、ビューテーブルでそれらを実行します。これは、より高速で、テーブルが自動的に自動更新されるためです

実際には、100k行があり、常に更新、書き込み、読み取りを行う場合、更新/挿入/削除用の通常のテーブルと読み取り用の別のビューテーブルを2つ作成することをお勧めします

ここで詳細情報を見つけることができます http://dev.mysql.com/doc/refman/5.0/en/create-view.html

于 2013-03-01T05:52:16.257 に答える
0

データベース内のすべての行の数を取得するには、次から始めます。

SELECT *, Count(*) AS Count
FROM tablename

次に、次のような WHERE 句を使用して、他の条件をさらに制限して返すことができます。

WHERE widgets > 10
于 2013-03-01T05:52:48.490 に答える