如何在codeigniter中对COUNT查询执行num_rows()?

TK1*_*123 4 php mysql codeigniter

这有效:

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

但这不是:

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

如何在COUNT(*)查询上执行num_rows?也是第二种方式做任何更好的性能明智吗?

Ste*_* Lu 13

执行一个COUNT(*)只会给你一个包含行数而不是结果本身的单行.

要访问COUNT(*)你需要做

$result = $query->row_array();
$count = $result['COUNT(*)'];
Run Code Online (Sandbox Code Playgroud)

第二个选项执行得更好,因为它不需要将数据集返回到PHP,而只需要计数,因此更加优化.

  • +1,但值得一提的是,您可以对列进行别名,然后使用它.就像`SELECT COUNT(*)AS cnt ...`然后使用`$ result ['cnt']`. (3认同)
  • 跳过一步直接引用结果,先不设置为数组:`COUNT(*) AS cnt ... ` 然后通过`$query->row(0)->cnt`访问 (2认同)

dan*_*eth 9

在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
Run Code Online (Sandbox Code Playgroud)


Var*_*ria 7

$query->num_rows()
Run Code Online (Sandbox Code Playgroud)

查询返回的行数.注意:在此示例中,$ query是查询结果对象分配给的变量:

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

echo $query->num_rows();
Run Code Online (Sandbox Code Playgroud)