我有以下3个表格:
(PK =主键,FK =外键)
File ID (PK) File Name ...
------------ ---------
1 a.jpg ...
2 b.png ...
3 c.jpg ...
. .
. .
. .
Run Code Online (Sandbox Code Playgroud)
Tag ID (PK) Tag Name ...
----------- ----------
1 Melbourne ...
2 April ...
3 2010 ...
. .
. .
. .
Run Code Online (Sandbox Code Playgroud)
File ID (FK) Tag ID (FK)
------------ -----------
1 1
1 5
1 7
2 2
2 4
3 3
. .
. .
. .
Run Code Online (Sandbox Code Playgroud)
在PHP中,我想获得所有标签的列表以及标签出现的次数(即具有此标签的文件数).
这可能与一个MySQL查询有关吗?
在您的代码ID上尝试GROUP BY.使用LEFT JOIN包含标记表中存在但未使用的标记.
SELECT
Tag_Name,
COUNT(Files_Tags.Tag_ID) AS cnt
FROM Tags
LEFT JOIN Files_Tags
ON Tags.Tag_ID = Files_Tags.Tag_ID
GROUP BY Tags.Tag_ID
Run Code Online (Sandbox Code Playgroud)
结果:
Melbourne 1 April 1 2010 1 ... ...
您可能还想添加一个ORDER BY Tag_Name或一个,ORDER BY COUNT(*)如果您想要按排序顺序返回的行.
Daniel Vassello也提交了一个答案但删除了它.然而,他的答案很容易适应您的新要求.这是他的解决方案,修改为使用LEFT JOIN而不是INNER JOIN:
SELECT t.tag_id,
t.tag_name,
IFNULL(d.tag_count, 0) AS tag_count
FROM tags t
LEFT JOIN
(
SELECT tag_id, COUNT(*) tag_count
FROM files_tags
GROUP BY tag_id
) d ON d.tag_id = t.tag_id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |