2013-07-03 162 views
1

我有兩個數據庫表,一個存儲事件,另一個存儲該事件的任何關聯註釋。使用左連接從另一個mysql表中計數記錄

DB表:

events: id, owner_id, timestamp 
comments: cmt_id, parent_id(events id), cmt_time 

我試圖得到基於特定owner_id每個事件的最後5個評論。

這是我如何加入我的表:

SELECT * FROM `events` 
LEFT JOIN comments ON comments.parent_id=events.id 
WHERE owner_id=X  
ORDER BY timestamp DESC LIMIT 0,5 

任何想法,我怎麼能得到的意見基礎上,事項標識多少?

回答

1

您的問題是關於每個事件的註釋數量(至少在我解釋它時)。爲此,您要使用一個group by

SELECT e.event_id, COUNT(c.parent_id) as NumComments 
FROM events e left JOIN 
    comments c 
    ON c.parent_id=e.id 
WHERE e.owner_id = X  
group by e.event_id; 

至於您的問題中的查詢。它不會做你想做的事情(「我試圖根據特定的owner_id獲取每個事件的最後5條評論。」)。相反,它會得到給定用戶的最後五條評論。期。

+0

This Works ...我補充說:GROUP BY e.id ORDER BY e.timestamp DESC LIMIT 0,5到最後它確實抓住了我需要的東西。我認爲我沒有說清楚。謝謝! – Paul

0

你可以做表連接處則使用COUNT()函數來計算有多少評論與給定的相關事項標識

http://www.w3schools.com/sql/sql_func_count.asp

我想舉一個例子,但我不能完全肯定你想要什麼樣的結束數據集。 COUNT(col)將計算與查詢結果關聯的行數

+0

理想情況下,我需要每個事件的評論數量。我可以爲每個事件做一個單獨的電話,但我希望只用一個數據庫電話就可以做到這一點 – Paul

相關問題