这有效:
$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?还是以第二种方式做任何更好的表现吗?
答案 0 :(得分:14)
执行COUNT(*)
只会给你一个包含行数的单行,而不是结果本身。
要访问COUNT(*)
,您需要执行
$result = $query->row_array();
$count = $result['COUNT(*)'];
第二个选项执行得更好,因为它不需要将数据集返回给PHP,而只需要计数,因此更加优化。
答案 1 :(得分:8)
在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
答案 2 :(得分:7)
$query->num_rows()
查询返回的行数。注意:在此示例中,$ query是查询结果对象分配给的变量:
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_rows();
答案 3 :(得分:5)
COUNT()查询中的num_rows实际上总是为1.它是一个没有GROUP BY子句的聚合函数,因此所有行都组合在一起。如果你想要计数的值,你应该给它一个标识符SELECT COUNT(*) as myCount ...
,然后用你正常的方法来访问结果(第一个,唯一的结果)并得到它''myCount'属性。
答案 4 :(得分:0)
这只会返回1行,因为您只是选择COUNT()
。在这种情况下,您会在mysql_num_rows()
上使用$query
。
如果您想获得每个ID
的计数,请将GROUP BY id
添加到字符串的末尾。
在性能方面,永远不要在查询中使用*
。如果表格中有100个唯一字段,并且您想要全部获取它们,则会写出全部100个字段,而不是*
。这是因为*
每次抓取一个字段时都必须重新计算它必须经过的字段数,这需要花费更多的时间来调用。
答案 5 :(得分:0)
我建议不要立即使用相同的参数执行另一个查询,只需立即运行SELECT FOUND_ROWS()
答案 6 :(得分:0)
$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));
}
答案 7 :(得分:0)
$query = $this->db->get();
if ($query->num_rows() > 0) {
echo 'have row';
} else {
echo 'no row return from db';
}
答案 8 :(得分:0)
根据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();
答案 9 :(得分:0)
这是我解决上述问题的方法
模型
$this->db->select('count(id) as ids');
$this->db->where('id', $id);
$this->db->from('your_table_name');
谢谢