用MySQL加入2个表

时间:2015-03-26 12:36:51

标签: php mysql

我有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字段对其进行排序。

我的目的是为用户创建一个标签选项,但我想从最常用的用户中对其进行排序。因此用户无需滚动即可搜索自己喜欢的标签。

任何人都可以帮助我吗?

1 个答案:

答案 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