2012-10-31 53 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 !!!!!!!!!!! –

相關問題