首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个sql中从第二个表中获取内容的标记

在一个sql中从第二个表中获取内容的标记
EN

Stack Overflow用户
提问于 2011-12-05 22:42:19
回答 1查看 89关注 0票数 1

我有两个表,一个用于帖子,一个用于与帖子相关的标签,其中posts.tags保存与帖子相关的标签的I。

帖子:

代码语言:javascript
运行
复制
id | title  | tags
-----------------
 1 | Foobar | 1 3 7
 2 | Barfoo | 2 3 7

标签:

代码语言:javascript
运行
复制
id | tag
--------
 1 | Tag1
 2 | Tag2
... and so forth

在查询帖子时,我希望得到一个帖子,它的所有标签都是空格分隔的字符串,而不是标签ids字符串。

我尝试了如下查询:

代码语言:javascript
运行
复制
SELECT *, 
(
  SELECT GROUP_CONCAT(tags.tag)
  FROM tags 
  WHERE tags.id LIKE 1 OR tags.id LIKE 3
) AS tag_str
FROM posts

这基本上输出了我正在寻找的东西;我不能确定的是子句中正确的WHERE条件,用我自己的话说,它将检查“是否有标记,其中tag.id匹配posts.tags中任何以空格分隔的数字-字符串”-如果任何这样的查询是可能的?

感谢你的帮助,k。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-05 22:47:20

你的基本数据库设计是有缺陷的,现在你正在承受这个缺陷的后果。如果您有任何可能解决此问题,您应该这样做。标签不应该作为空格分隔的字符串存储在Posts表的单个列中。相反,您应该有一个连接表Posts_Tags_xref,它可以解决多对多关系。该表由两个外键Posts.idTags.id组成。

对于上面的示例数据,您需要:

代码语言:javascript
运行
复制
Posts_Tags_xref
==================
post_id     tag_id
-------     ------
      1          1
      1          3
      1          7
      2          2
      2          3
      2          7

然后您请求的查询将变为:

代码语言:javascript
运行
复制
SELECT p.post_id, p.title, GROUP_CONCAT(t.tag)
    FROM Posts p
        LEFT JOIN Posts_Tags_xref ptx
            INNER JOIN Tags t
                ON ptx.tag_id = t.tag_id
            ON p.post_id = ptx.post_id
    GROUP BY p.post_id, p.title;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8387006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档