5

これは機能します:

        $sql = "SELECT id
                FROM `users`
                WHERE `account_status` = '" . $i . "'"; 
        $query = $this->db->query($sql);
        var_dump($query->num_rows());

しかし、これはしません:

        $sql = "SELECT COUNT(*)
                FROM `users`
                WHERE `account_status` = '" . $i . "'"; 
        $query = $this->db->query($sql);
        var_dump($query->num_rows());

COUNT(*) クエリで num_rows を実行するには? また、2番目の方法でパフォーマンスを向上させていますか?

4

9 に答える 9

14

を実行するCOUNT(*)と、結果自体ではなく、行数を含む単一の行のみが得られます。

アクセスCOUNT(*)するには、する必要があります

$result = $query->row_array();
$count = $result['COUNT(*)'];

2 番目のオプションは、データセットを PHP に返す必要がなく、代わりにカウントのみを返すため、はるかに最適化されているため、パフォーマンスが大幅に向上します。

于 2012-07-06T01:42:56.153 に答える
11

CIでは、実際には非常に簡単です。必要なのは

$this->db->where('account_status', $i);
$num_rows = $this->db->count_all_results('users');
var_dump($num_rows); // prints the number of rows in table users with account status $i
于 2012-07-06T08:25:18.743 に答える
8
$query->num_rows()

クエリによって返される行数。注: この例では、$query はクエリ結果オブジェクトが割り当てられる変数です。

$query = $this->db->query('SELECT * FROM my_table');

echo $query->num_rows();
于 2015-05-13T05:27:42.060 に答える
4

COUNT() クエリの num_rows は文字通り常に 1 になります。これは GROUP BY 句のない集計関数であるため、すべての行が 1 つにグループ化されます。カウントのが必要な場合は、識別子SELECT COUNT(*) as myCount ...を指定してから、結果 (最初の唯一の結果) にアクセスする通常の方法を使用して、その 'my​​Count' プロパティを取得する必要があります。

于 2012-07-06T01:44:34.500 に答える
-1

を選択しているだけなので、これは 1 行のみを返しますCOUNT()。この場合は を使用mysql_num_rows()します$query

各 の数を取得する場合は、文字列の末尾にID追加します。GROUP BY id

パフォーマンスに関して*は、クエリで使用しないでください。テーブルに 100 個の一意のフィールドがあり、それらすべてを取得したい場合は、 ではなく 100 個すべてを書き出します*。これは*、フィールドを取得するたびに、移動する必要があるフィールドの数を再計算する必要があり、呼び出しに時間がかかるためです。

于 2012-07-06T01:44:09.283 に答える