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?第二种方式是否有更好的性能?

4

9 回答 9

14

做 aCOUNT(*)只会给你一个包含行数而不是结果本身的单数行。

要访问COUNT(*)你需要做

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

第二个选项执行得更好,因为它不需要将数据集返回给 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 子句的聚合函数,因此所有行都组合在一起。如果你想要计数的,你应该给它一个标识符SELECT COUNT(*) as myCount ...,然后使用你访问结果的正常方法(第一个,唯一的结果)并获取它的 'myCount' 属性。

于 2012-07-06T01:44:34.500 回答
3

根据CI Docs,我们可以使用以下内容,

$this->db->where('account_status', $i); // OTHER CONDITIONS IF ANY
$this->db->from('account_status'); //TABLE NAME
echo $this->db->count_all_results();

如果我们想在没有任何条件的情况下获取表中的总行数,简单使用

echo $this->db->count_all_results('table_name'); // returns total_rows presented in the table
于 2019-04-16T12:49:44.877 回答
0

这是我解决上述问题的方法

模型

$this->db->select('count(id) as ids');
$this->db->where('id', $id);
$this->db->from('your_table_name');

谢谢

于 2021-08-10T06:58:25.107 回答
-1

这只会返回 1 行,因为您只是选择了COUNT(). 在这种情况下,您将使用mysql_num_rows()on 。$query

如果要获取每个ID' 的计数,请添加GROUP BY id到字符串的末尾。

性能方面,永远不要*在查询中使用。如果一个表中有 100 个唯一字段,并且您想全部获取它们,则写出全部 100,而不是*. 这是因为*必须重新计算它必须去多少个字段,每次它抓取一个字段,这需要更多的时间来调用。

于 2012-07-06T01:44:09.283 回答
-1

我建议不要使用相同的参数进行另一个查询,而是立即运行SELECT FOUND_ROWS()

于 2012-07-06T02:01:46.567 回答
-1
    $list_data = $this->Estimate_items_model->get_details(array("estimate_id" => $id))->result();
    $result = array();
    $counter = 0;
    $templateProcessor->cloneRow('Title', count($list_data));
    foreach($list_data as $row) {
        $counter++;
        $templateProcessor->setValue('Title#'.$counter, $row->title);
        $templateProcessor->setValue('Description#'.$counter, $row->description);
        $type = $row->unit_type ? $row->unit_type : "";
        $templateProcessor->setValue('Quantity#'.$counter, to_decimal_format($row->quantity) . " " . $type);
        $templateProcessor->setValue('Rate#'.$counter, to_currency($row->rate, $row->currency_symbol));
        $templateProcessor->setValue('Total#'.$counter, to_currency($row->total, $row->currency_symbol));   
    }
于 2017-08-24T21:32:45.387 回答