使用 Kohana DB 时,在需要分页计数时如何避免重复代码?

发布于 2024-11-19 00:43:24 字数 410 浏览 3 评论 0原文

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

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

然后执行查询本身。

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

添加

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

到主查询只会返回一条记录。

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

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

从选择中删除...

现在我能想到的唯一方法是在 SQL 代码本身上查找和替换,然后只运行所述代码 SQL...必须不过是一个更好的方法...我希望...

谢谢!

Using the Kohana query builder, is it possible to build my query piece by piece.

Then execute a count on said query.

Then execute the query itself.

All without having to write duplicate conditionals... one for the count and one for the results...

Adding

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

To the main query results in only getting back one record.

Is it maybe possible to execute the count, and somehow remove

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

from the select...

Right now the only way I can think of is a find and replace on the SQL code itself, and then just running said code SQL... there must be a better way though... I hope...

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

画尸师 2024-11-26 00:43:24

为此,我使用了 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;
}

To do just that I use 3 methods. First one returns the paginated results, second one gets the count. Third, private method, holds common conditions used by #1 and #2. If the query needs to use JOINs or WHEREs or anything like that, it all goes to #3. This way there is no need to repeat the query.

/* 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;
}
紫瑟鸿黎 2024-11-26 00:43:24

使用 count_last_query()

// $db is a Database instance object
$count = $db->count_last_query();

Use count_last_query()

// $db is a Database instance object
$count = $db->count_last_query();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文