0

これに関する情報を見つけることができませんでした。これを独自に行うこともできますが、可能であれば、クエリに保持することが最善の選択肢であると感じています。

基本的に、クエリの最上位の「統計」部分を追加したいと考えています。

結果が得られると、そのように表示されます

num_rows = 900
distinct_col = 9
results = array()

このようにして、結果を通常どおりにループし、一度だけ必要な情報を外部に引き出すことができます。これは可能ですか?

編集: num_rows のような通常の mysql 統計を正確に探しているわけではありません。しかし、結果を 10 に制限すると、num_rows は 10 を返しますが、合計結果が必要なため、900 が必要です。ほとんどの場合、別のクエリを使用して金額だけを探しますが、すべてを 1 つに結合します。クエリは論理的に高速に思えます。また、必要な num_rows だけでなく、それらがすべて製品であり、特定のカテゴリがあるとします。すべてのアイテムが該当するカテゴリの数を数える必要があります。したがって、これらの列の結果が 1 つしかない場合に生の結果をループするのはばかげています。

EDIT 2:さらに明確にするために、いくつかの列でいくつかのカウントを取得する必要があり、結合の最小値と最大値の結果を取得する必要があります。すべてのループでそれを返すことはうまくいきますが、一度だけ必要なときにすべてのループで無駄に同じ正確な戻り値を返すことは論理的ではないようです。私は MySQL の専門家ではありません。主に、必要なデータを取得するための最も論理的で最速の方法を見つけようとしています。

PHP の戻り値の例を次に示します。

array(
  [num_rows] => 900,
  [categories] => 9,
  [min_price] => 400,
  [max_price] => 900,
  [results] => array(
   [0] => //row array
   [1] -> //row array
  )
);

Mysql は、結果を「フェッチ」する前にデフォルトの num 行を返します。そこにカスタム結果を追加するだけで十分な場合があります。

4

1 に答える 1

1

なぜそれが必要なのかわかりませんが、それは非常に簡単に入手できます

safeMysqlを使用していると仮定します(ただし、データを配列に取得する方法は何でも使用できます)

$results = $db->getAll("SELECT * FROM t");
$num_rows = count($results);
$num_cols = count($results[0]);

それで全部です

私は主に、必要なデータを取得するための最も論理的で最速の方法を考え出すように努めています。

はい、そうです。
ループごとに集計データを取得しても問題ありません。

LIMIT を超える数については、必要な場合は、mysql の SQL_CALC_FOUND_ROWS / FOUND_ROWS() 機能を使用できます

于 2013-07-25T16:54:38.037 に答える