mySQL使用JOIN计数出现次数
我的事件系统有一个标记系统,我想创建一个“标记云” 我有活动,可以有多个“类别” 以下是表格结构:mySQL使用JOIN计数出现次数,mysql,join,count,one-to-many,Mysql,Join,Count,One To Many,我的事件系统有一个标记系统,我想创建一个“标记云” 我有活动,可以有多个“类别” 以下是表格结构: **Event_Categories** (Stores Tags / Categories) | id | name | +-----------------+ + 1 | sport | + 2 | charity | + 3 | other_tag | **Events_Categories** (Linking Table) | event_id
**Event_Categories** (Stores Tags / Categories)
| id | name |
+-----------------+
+ 1 | sport |
+ 2 | charity |
+ 3 | other_tag |
**Events_Categories** (Linking Table)
| event_id | event_category_id |
+-------------------------------+
+ 1 | 1 |
+ 2 | 2 |
+ 3 | 1 |
+ 3 | 2 |
总结:
Event ID 1 -> Sport
Event ID 2 -> Charity
Event ID 3 -> Sport, Charity
我想退回以下物品:
| tag_name | occurrences |
+-----------+-------------+
| sport | 2 |
| society | 2 |
other_标记-未实际返回,因为它已出现0次
谢谢!:) 这将起作用:
SELECT c.name AS tag_name, COUNT(ec.event_id) AS occurrences
FROM Event_Categories c
INNER JOIN Events_Categories ec ON c.id = ec.event_category_id
GROUP BY c.id
如果要包括发生次数为0的类别,请将内部联接更改为左联接
,这将起作用:
SELECT c.name AS tag_name, COUNT(ec.event_id) AS occurrences
FROM Event_Categories c
INNER JOIN Events_Categories ec ON c.id = ec.event_category_id
GROUP BY c.id
如果要包含发生次数为0的类别,请将内部联接更改为左联接
SELECT e.name,
COUNT(1)
FROM Event_Categories e INNER JOIN
Events_Categories_Linking ec ON e.id = ec.event_category_id
GROUP BY e.name
像这样的怎么样
SELECT e.name,
COUNT(1)
FROM Event_Categories e INNER JOIN
Events_Categories_Linking ec ON e.id = ec.event_category_id
GROUP BY e.name
谢谢,但是即使没有,它也会返回事件数=1?此外,计数似乎不正确?谢谢,但是即使没有,也会返回次数=1?而且计数似乎不正确?