2010-05-30 57 views
0

任何想法,爲什麼這不起作用在MySQL?MySQL查詢幫助,包括計數?

SELECT blogentry.*, 
     person.personName, 
     (SELECT * 
      FROM BlogEntryComment 
     Where BlogEntryID = '8') as CommentCount  
    FROM blogentry 
INNER JOIN person ON blogentry.personID = person.personID 
WHERE blogentry.deleted = 'N' 
ORDER BY blogentry.dateAdded DESC 

回答

3

子查詢只需要返回一個值:字段數。 *返回所有行,而count(*)將返回有多少行。

(SELECT count(*) FROM BlogEntryComment Where BlogEntryID = '8') 
+0

+1打我吧,更好的解釋:) – 2010-05-30 00:24:08

1

你必須使用聚合函數COUNT爲了得到價值 - 子查詢中會體弱SELECT *,因爲它正試圖爲行返回所有的列值到一個列。

也就是說,你所擁有的將返回相同的CommentCount值,每個BLOGENTRY記錄返回。以下是更好的方法:

SELECT be.*, 
      p.personname, 
      COALESCE(x.num, 0) AS CommentCount 
    FROM BLOGENTRY be 
    JOIN PERSON p ON p.personid = be.personid 
LEFT JOIN (SELECT bec.blogentryid, 
        COUNT(*) AS num 
      FROM BLOGENTRYCOMMENT bec 
     GROUP BY bec.blogentryid) x ON x.blogentryid = be.blogentryid 
+0

+1。不知道它是否正確,但通常我發現的高級代表的查詢是我不瞭解的,比「更簡單」的解決方案快10倍, – Matchu 2010-05-30 01:47:42