2013-07-03 111 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

相关问题