我有以下表格:
代码
id tag_name
实施例
id类别标题
examples_tags
id tag_id example_id
如何检索每个标记下的示例数? (实际上有点像stackoverflow:))
我还想要一个类型的附加条件: examples.category =“英语示例”
这就是我的开始......
SELECT tags.id, tags.tag_name, COUNT( examples_tags.tag_id ) AS 'no_tags'
WHERE tags.id = examples_tags.tag_id
&&
examples.category = 'english examples'
GROUP BY tags.id
谢谢。
答案 0 :(得分:1)
这是一个3表连接,使用标签和示例表之间中间的多对多表examples_tags。您还必须按选择列表中不是聚合的每列进行分组。
SELECT t.id, t.tag_name, COUNT( *) AS 'no_tags'
FROM tags t
JOIN examples_tags et
ON t.id = et.tag_id
JOIN examples e
ON e.example_id = e.id
WHERE
e.category = 'english examples'
GROUP BY t.id, t.tag_name
ORDER BY t.tag_name
答案 1 :(得分:1)
如果没有连接,则接下来是正确的:
SELECT tags.id, tags.tag_name, COUNT(*) AS num_tags
FROM tags, examples_tags, examples
WHERE tags.id = examples_tags.tag_id
and examples_tags.example_id=examples.id
and examples.category = 'english examples'
GROUP BY tags.id, tags.tag_name
您需要按所有非聚合字段进行分组。
否则你可以使用内连接,使查询更具可读性:
SELECT tags.id, tags.tag_name, COUNT(*) AS num_tags
FROM tags
inner join examples_tags on examples_tags.tag_id=tags.id
inner join examples on examples_tags.example_id=examples.id
WHERE examples.category = 'english examples'
GROUP BY tags.id, tags.tag_name