php - 哪种类型的连接用于计数?

标签 php mysql zend-framework zend-db zend-db-table

我尝试了不同的连接类型,但无法弄清楚应该使用哪种类型。我想计算每篇文章的评论数。

$select = $this->_db->select()
        ->from($this->_name)
        ->joinLeft('categories', 'categories.cat_id = ' . $this->_name . '.category', array('category_name' => 'name'))
        ->joinLeft('comments', 'comments.post_id = ' . $this->_name. '.post_id', array('num_comments' => 'COUNT(*)'))
        ->group($this->_name.'.post_id')
        ->limit(3)
        ->order("pubDate DESC");
if($category_id > 0) $select->where("category = ?", $category_id);
if($last_pub_date > 0) $select->where("$this->_name.pubDate < ?", $last_pub_date);

我也将此方法用于我的 Twitter,例如分页,因此 $last_pub_date 就是为此而设计的。使用 joinLeft() 看起来不错,但当然,如果文章没有评论,查询提取计数为 1 而不是 0。我尝试使用其他连接类型,但如果没有评论,则整行不是获取或 $this->_db->order("pubDate DESC") 无法正常工作。我也尝试过使用子查询,但我不确定我是否按应有的方式编写了它。

最佳答案

左联接是右联接,但您需要使用COUNT(comment_id) 而不是COUNT(*)COUNT(*) 将返回行数,即使没有评论也将为一。 COUNT(comment_id) 将返回非NULL comment_id 值的数量,这应该是您要查找的值。

http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count

关于php - 哪种类型的连接用于计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177805/

相关文章:

php - XPath 选择器中是否有 "or"?

php - 在 windows 10 中安装 composer 失败缺少 openssl 扩展

c# - 在 mysql 数据库中存储大文件/二进制数据 : when is it ok?

MYSQL 更新时截断不正确的 DOUBLE 值

php - 如何在 Zend Framework 中获取 HTTP_REFERER

php - Zend Framework - 在注册表中找不到按名称命名的插件

php - session 注销同时获取大量数据

php - 为搜索词提供黄色背景色

php - 用逗号求和 mysql 列中的值

MySQL 插入 int 而不是 double