2012-10-31 47 views
3

评论这是我国上午3点30,所以我需要睡觉,但我不能没有这样的:MySQL查询 - 选择的所有帖子和计数为每一个

我试图让所有帖子(使用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(...); 
} 
+0

为了摆脱错误的消息,你将不得不写JOIN(SELECT ...)_AS counts_ ON ......然而,你的查询似乎还存在其他问题(例如,你应该将返回一个键和来自子查询的计数,并且on子句缺少一个条件。) –

+0

@TerjeD。你能解释一下吗?我知道MySQL for基本查询但是当我需要做更难的事情时,我指的是因为'JOIN'等等不是我的力量! –

+0

显示一个结果表的例子应该看起来像。 –

回答

3
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; 
+0

'错误代码:1054.'where子句'中的未知列'p.id' –

+0

@Frederick:我编辑它以删除内联中的WHERE选择 – davek

+0

WORK !!!!!!!!!!! –

相关问题