我有3张桌子:
Table User => id, name
Table Tag => id, tag_name, used, status
Table User_tag => id, user_id, tag_id, inserted_at
*其中user_id引用USER表的id字段,tag_id引用TAG表上的id字段)
我的问题是: 我想选择所有标签并根据标签在user_tag中显示的次数进行排序,如果user_tag上根本没有显示,则根据TAG表上的字段USED对其进行排序。
我试过这样:
SELECT tag.*, COUNT(user_tag.id) as number_of_appear FROM tag
LEFT JOIN user_tag ON tag.id = user_tag.tag_id
WHERE tag.status = 1 AND user_tag.user_id = 2
GROUP BY tag.tag
ORDER BY number_of_appear DESC, tag.used DESC
在这种情况下,user_tag表中没有user_id = 2。这就是它返回0记录的原因。我希望它仍然返回tag_name,即使user_tag表上没有记录。如果标签ID根本没有出现,请根据tag.used字段对其进行排序。
我的目的是为用户创建一个标签选项,但我想从最常用的用户中对其进行排序。因此用户无需滚动即可搜索自己喜欢的标签。
任何人都可以帮助我吗?
答案 0 :(得分:0)
SELECT tag.name,
(SELECT count(*) as amount
FROM user_tag
JOIN tag ON tag.id = user_tag.tag_id
WHERE tag.status = 1 AND user_tag.user_id = 2 AND tag.id = t.id
) as total
FROM tag as t
ORDER BY total