php - MySQL 查询 - 选择所有帖子并计算每个帖子的评论

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

我所在的国家/地区现在是凌晨 3:30,所以我需要 sleep ,但我不能没有这个:

我正在尝试获取所有帖子(使用 Zend_Db)并计算每个帖子的评论数。

架构

blog_posts:

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| id            | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| title         | varchar(255)     | NO   |     | NULL    |                |
| content       | text             | NO   |     | NULL    |                |
| alias         | varchar(100)     | NO   |     | NULL    |                |
| user_id       | int(11)          | NO   |     | NULL    |                |
| created_date  | datetime         | NO   |     | NULL    |                |
| modified_date | datetime         | YES  |     | NULL    |                |
| thumbnail     | varchar(255)     | YES  |     | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+

这里是blog_comments:

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| id            | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id       | int(11)          | NO   |     | NULL    |                |
| post_id       | int(11)          | NO   |     | NULL    |                |
| comment       | text             | NO   |     | NULL    |                |
| created_date  | datetime         | NO   |     | NULL    |                |
| modified_date | datetime         | YES  |     | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+

注意:blog_comments.post_idblog_posts.id 链接。


我想要一个这样的结果表:

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| id            | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| title         | varchar(255)     | NO   |     | NULL    |                |
| content       | text             | NO   |     | NULL    |                |
| alias         | varchar(100)     | NO   |     | NULL    |                |
| user_id       | int(11)          | NO   |     | NULL    |                |
| created_date  | datetime         | NO   |     | NULL    |                |
| modified_date | datetime         | YES  |     | NULL    |                |
| thumbnail     | varchar(255)     | YES  |     | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+
| TEMPOROARY COLUMN IN OBJECT ($post->comment)                             |
+---------------+------------------+------+-----+---------+----------------+
| comments      |                  |      |     |         |                |
+---------------+------------------+------+-----+---------+----------------+

现在,这是我现在的查询:

SELECT `p`.*, `c`.*
FROM `blog_posts` `p`
LEFT JOIN (
    SELECT COUNT(*) 
    FROM `blog_comments` `c`
    WHERE c.post_id = p.id
) ON `p`.`comments`;

但它给我一个错误:

Error Code: 1248. Every derived table must have its own alias

所以如果有人能帮助我,我将不胜感激!


重要提示 我正在使用 Zend_DbZend_Db_Select,所以我必须能够使用像 joinLeft() 这样的函数或我需要的任何东西。

这是我的 select() 模型:

$select = $this->table->select();

if ($alias) {
    $select->where('alias = ?', $alias);
    return $this->table->fetchRow($select);
}
if ($withComments) {
    // I WILL PLACE THE CODE HERE, EXEMPLE:
    $select->joinLeft(...);
}

最佳答案

SELECT p.*, x.*
FROM blog_posts p
LEFT JOIN 
(
    SELECT post_id, COUNT(*) as cc
    FROM blog_comments
    GROUP BY post_id
) x 
ON x.post_id = p.id;

关于php - MySQL 查询 - 选择所有帖子并计算每个帖子的评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13153340/

相关文章:

php - Zend : How to log PHP errors

php - 如何在 Zend Framework 中存储 cron 作业的脚本?

javascript - 提交前验证 "select"下拉列表

mysql - Python 脚本数据库连接作为池不起作用,但简单连接正常

mysql - 在 MySQL 中将查询结果与自身连接

php - 为不同的用户创建相同的登录页面

javascript - 提交表单后如何从 URL 中删除参数?

php - 左连接在 Laravel 中获得一行

php - MYSQL - 在多列中搜索单词

PHP imagettftext 总是画黑