0

私のMySQLCOUNT(*)クエリが常に->num_rows等しい結果になるのはなぜだろうと思っています1

$result = $db->query("SELECT COUNT( * ) FROM u11_users");
print $result->num_rows; // prints 1

一方、データベースから「実際のデータ」をフェッチするとうまくいきます。

$result = $db->query("SELECT * FROM u11_users");
print $result->num_rows; // prints the correct number of elements in the table

この理由は何でしょうか?

4

4 に答える 4

6

Count(*)行数を含む1行だけを返すためです。

例:Count(*)次のような結果を使用します。

array('COUNT(*)' => 20);
echo $result['COUNT(*)']; // 20

参照

于 2012-11-30T20:14:18.887 に答える
3

1行*を返す必要があります。カウントを取得するには、次のことを行う必要があります。

$result = $db->query("SELECT COUNT(*) AS C FROM u11_users");
$row = $result->fetch_assoc();
print $row["C"];

*集計関数を使用していて、使用していないためGROUP BY

于 2012-11-30T20:15:36.277 に答える
2

それが存在する理由ですCOUNT、それは常に選択された行の数で1つの行を返します

http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

于 2012-11-30T20:15:49.440 に答える
1

Count() は集計関数です。つまり、実際の回答を含む行を 1 つだけ返します。max(id); のような関数を使用すると、同じタイプのものが表示されます。列の最大値が 142 の場合、142 レコードではなく、値が 142 の 1 つのレコードが表示されると予想されます。 400 行ではなく、答えが 400 の単一行が取得されます。

したがって、カウントを取得するには、最初のクエリを実行し、最初の (そして唯一の) 行の値にアクセスするだけです。

ちなみに、すべてのデータをクエリして取得するのではなく、この count(*) アプローチを$result->num_rows;使用する必要があります。これは、不要なデータの束を引き戻すため、すべての行をクエリするとはるかに時間がかかるためです。

于 2012-11-30T20:21:12.047 に答える