我想知道这是否可能只用一个mysql查询。
我做的是一个标签系统。因此,我有两张桌子:
Tags, id | heading
Tagged, id | image_id | tag_id | timestamp | strength
一切正常,但现在我已经到了向用户显示标签的阶段,并计划根据标签被使用的次数对它们进行排序。
所以简而言之,我需要一些东西来做以下事情,
获取当前显示图像的所有标记,例如id = 34
数一数这个标签被使用了多少次。
根据这些结果从高到低排列标记列表。
现在我试着研究连接、左连接等,但这一切看起来都很难把握。
如果有人能解释如何轻松做到这一点,那就太好了!
编辑
我现在有这个

SELECT tags.id, COUNT( tagged.id ) AS count
FROM tags
INNER JOIN tagged ON tags.id = tagged.tag_id
WHERE tagged.image_id =  '1'
GROUP BY tags.id
ORDER BY count DESC

这只返回一个标记被标记到当前图像id的次数,如何使其从所有图像中计数?

最佳答案

若要获取标记的全局用法,可能需要重新联接到标记表,因为您正在对原始标记表应用where条件。试试这个:

SELECT
    t2.id,
    COUNT(t3.tag_id) AS global_count,
    GROUP_CONCAT(t3.image_id) AS images_with_tag
FROM
    tagged t1
    JOIN tags t2 ON t2.id = t1.tag_id
    LEFT JOIN tagged t3 ON t3.tag_id = t2.id
WHERE t1.image_id = 1
GROUP BY t2.id
ORDER BY global_count DESC

10-08 07:16