LEFT JOIN上的数据库规范化?

时间:2015-05-10 16:55:38

标签: php mysql database left-join database-normalization

我想用一个查询将所有帖子标签加载到MySQL服务器中。

现在,我决定使用LEFT JOIN,因为如果没有标签与我的帖子相关联那么我会有那个帖子,或者您对此有任何其他建议?
这是我的问题:

SELECT * FROM tags, tags_map 
LEFT JOIN posts on posts.cid = tags_map.pid 
WHERE tags.tag_id = tags_map.tid

现在问题是重复数据,例如,如果帖子有三个标签,那么帖子本身将重复三次!
在这种情况下,我应该为每个帖子运行另一个查询来获取标签吗?或者我可以使用单个查询获得所有这些但没有重复数据?

1 个答案:

答案 0 :(得分:1)

我想你想要group_concat

SELECT posts.*, 
   (select GROUP_CONCAT(tags.name)
    from  tags, 
      tags_map 
LEFT JOIN  on posts.cid = tags_map.pid 
WHERE tags.tag_id = tags_map.tid) as tagCombo
from posts

如果您发布架构,示例数据和预期结果,理想情况下作为SQLFiddle,我可以检查。