1

使用 Kohana 查询构建器,是否可以逐个构建我的查询。

然后对所述查询执行计数。

然后执行查询本身。

所有这些都无需编写重复的条件......一个用于计数,一个用于结果......

添加

DB::select(array('COUNT("pid")', 'mycount'))

对主查询的结果是只取回一条记录。

是否有可能执行计数,并以某种方式删除

array('COUNT("pid")', 'mycount')

从选择...

现在我能想到的唯一方法是对 SQL 代码本身进行查找和替换,然后只运行所说的代码 SQL ......不过一定有更好的方法......我希望......

谢谢!

4

2 回答 2

2

使用count_last_query()

// $db is a Database instance object
$count = $db->count_last_query();
于 2011-07-08T05:15:30.427 回答
2

为此,我使用了 3 种方法。第一个返回分页结果,第二个获取计数。第三,私有方法,持有#1 和#2 使用的通用条件。如果查询需要使用 JOIN 或 WHERE 或类似的东西,这一切都转到 #3。这样就不需要重复查询了。

/* 1 */
public function get_stuff($pagination = false){
    $query = DB::select(/* ... columns here ... */);
    $query = $this->get_stuff_query($query);
    if($pagination) $query->limit($pagination->items_per_page)->offset($pagination->offset);
    return $query->execute();
}

/* 2 */
public function get_stuff_count(){
    $query = DB::select(array('COUNT("id")', 'total_rows'));
    $query = $this->get_stuff_query($query);
    $result = $query->execute();
    return $result->get('total_rows',0);
}

/* 3 */
private function get_stuff_query($query){
    $query->from(/* tablename */);
    $query->join(/* ... */);
    $query->where(/* ... */);
    return $query;
}
于 2011-07-08T06:49:23.313 回答