在Codeigniter应用程序中获取查询的行计数

i5desfxk  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(114)

我在Codeigniter中使用$this->db->get()->row_array()从数据库中获取单行结果。我不想为了得到单行的结果而必须键入列名。

PHP代码

// Query 1
$results = array();
$this->db->select('COUNT(listing_id) as num')
         ->from('listings')
         ->where('city', $city);
$result = $this->db->get()->row_array();
$results['num'] = $result['num'];

还有更简洁的吗?
也许是一个两行?

$result = $this->db->get()->row_array();
$results['num'] = $result['num'];

理想情况下,一行程序将是伟大的!

$results['num'] = first_element_of($this->db->get()->row_array());
oxcyiej7

oxcyiej71#

不知道codeigniter和从来没有用过它,但这可能会工作

// Query 1
$results = array();
$this->db->select('COUNT(listing_id) as num')
        ->from('listings')
        ->where('city', $city);

$results['num'] = $this->db->get()->row()->num;

诀窍是你可以链接对象成员访问。你不能用数组($foo->row_array()['num'])来做这件事,所以这就是问题所在。如果你使用的是好的老mysql,你应该看看mysql_result。没有mysqli等价的。
根据where()的返回值,您可以尝试将其进一步缩短为

$results = array('num' => 
    $this->db->select('COUNT(listing_id) as num')
        ->from('listings')
        ->where('city', $city)
        ->get()
        ->row()
        ->num
);
a0x5cqrl

a0x5cqrl2#

Codeigniter有一个专门的帮助器方法来计算结果集中的行数。
count_all_results()将无条件返回一个非负整数。
所有的查询都应该在模型中完成,所以你的模型方法可以是:

public function countCityListings(int $city): int
{
    $this->db->where('city', $city)->count_all_results('listings');
}

将返回值添加到控制器的payload变量以传递给视图可以是:

$result['num'] = $this->your_model->countCityListings($city);

相关问题