我正在尝试从我的数据库中的所有视频中获取最受欢迎的标签(忽略空白标签).我还需要每个标签的'flv'.如果每个视频都有一个标签,我就可以按照自己的意愿工作:
SELECT tag_1, flv, COUNT(tag_1) AS tagcount
FROM videos
WHERE NOT tag_1=''
GROUP BY tag_1
ORDER BY tagcount DESC LIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)
但是在我的数据库中,每个视频都允许使用三个标签 - tag_1,tag_2和tag_3.有没有办法让从多列中读取最流行的标签?
记录结构是:
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| flv | varchar(150) | YES | | NULL | |
| tag_1 | varchar(75) | YES | | NULL | |
| tag_2 | varchar(75) | YES | | NULL | |
| tag_3 | varchar(75) | YES | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
select tag, flv, count(*) as tag_count
from (
select tag_1 as tag, flv from videos
UNION
select tag_2 as tag, flv from videos
UNION
select tag_3 as tag, flv from videos
) AS X
Run Code Online (Sandbox Code Playgroud)
我认为会这样做,但如果任何记录对两个标签具有相同的值,则会进行重复计算.
更新:添加AS X.