从MySQL和PHP的不同列中选择Distinct Values

时间:2016-01-17 18:09:22

标签: php mysql

我遇到了麻烦。 我有一个包含以下列的mysql表:

MySQL columns

这个表有比图中显示的更多,但我只需要从图片中显示的数据中获取数据。

列包含标记词,经常重复。 我需要抓取一个包含Tags的单个数组,而不是获取重复的条目,而是获得所有唯一的条目。

我该怎么做? 为此目的最好的查询是什么?

另外,如果可能的话,我想计算这个标签出现在桌子上的次数。

我打算在PHP while()循环中显示数据,如下所示:

TagA(#videos)
TagB(#videos)
[...]

2 个答案:

答案 0 :(得分:1)

您不应该将标签存储在不同的列中。相反,它们应该放在每个视频和每个标签上有一行的表中。

鉴于此结构,您可以使用union all

执行所需操作
select tag, count(*)
from (select tag1 as tag from t union all
      select tag2 as tag from t union all
      select tag3 as tag from t union all
      select tag4 as tag from t union all
      select tag5 as tag from t
     ) t
group by tag;

答案 1 :(得分:0)

如果我正确理解了您的问题,那么任何列中的所有标记词都会被平等对待,因此每个标记字段的所有计数的联合都应该有效。

select tag, sum(tagCount) as tagCount from
(select tag1 as tag, count(*) as tagCount from yourTable GROUP BY tag1
UNION
select tag2 as tag, count(*) as tagCount from yourTable GROUP BY tag2
UNION
select tag3 as tag, count(*) as tagCount from yourTable GROUP BY tag3
UNION
select tag4 as tag, count(*) as tagCount from yourTable GROUP BY tag4
UNION
select tag5 as tag, count(*) as tagCount from yourTable GROUP BY tag5)
GROUP BY tag

警告:我面前没有数据库连接可以立即尝试。