这是我关于 SO 的第一个问题。所以我有一个名为 posts 的 MYSQL 表,其中包含以下列:
发布,标签1,标签2。
假设表中有 10 行。其中 9 个帖子仅在 tag1 中具有标签,第十个在 tag1 和 tag2 中具有标签(tag2 中的标签在 tag1 中与其他帖子重复。)表格如下所示:
Tag1 Tag2
computer -
tv -
computer -
tv -
laptop -
bicycle -
stereo -
computer laptop
tv -
laptop -
我想要的功能是查询表以获取出现频率最高的标签,将它们组合在一起,然后按照频率从高到低的顺序对它们进行排序。这是我的 mysql 查询(我正在使用 PDO):
SELECT count, tag
FROM (SELECT count(tag1) as count, tag1 as tag FROM posts) as a
UNION ALL
SELECT count(tag2) as count, tag2 as tag
FROM posts
此查询不起作用,因为它没有向我显示存在的每个标签,而且它似乎也没有将列 tag2 中的一个标签添加到来自 tag1 的结果中,而是存在重复。因此,我没有看到笔记本电脑出现 3 次,而是看到笔记本电脑出现了两次,然后又出现了一次。
我认为这可以通过 GROUP BY 解决,但是当我尝试添加 GROUP BY 时,mysql 会抛出一个通用语法错误,说要查看我的数据库服务器的文档。所以我想我不确定将 GROUP BY 放在哪里,我可能认为我的查询根本不正确。请提供任何帮助....我查看了有关使用 group by with union 的许多其他问题,只是没有找到答案,或者我对此理解不够,无法知道何时看到答案。