【发布时间】:2011-12-05 22:54:16
【问题描述】:
我有两张表,一张用于帖子,一张用于与帖子相关的标签,其中posts.tags 保存与帖子相关的标签的ID。
帖子:
id | title | tags
-----------------
1 | Foobar | 1 3 7
2 | Barfoo | 2 3 7
标签:
id | tag
--------
1 | Tag1
2 | Tag2
... and so forth
在查询帖子时,我希望得到一个帖子,其所有标签都是以空格分隔的字符串,而不是标签 ID 字符串。
我试过这样的查询:
SELECT *,
(
SELECT GROUP_CONCAT(tags.tag)
FROM tags
WHERE tags.id LIKE 1 OR tags.id LIKE 3
) AS tag_str
FROM posts
这基本上输出了我正在寻找的东西;我想不通的是子条款中正确的 WHERE 条件,用我自己的话来说,它会检查“标签 WHERE tag.id 是否匹配posts.tags 中的任何空格分隔的数字字符串”——如果有任何这样的查询有可能吗?
任何帮助表示赞赏, k.
【问题讨论】:
-
当然,正如 Joe 在下面提到的,您应该使用一个多对多表,将主键 post.id 与主键 tags.id 链接起来。这将避免必须从数据库中解析字符串,减少错误并做出更好的整体设计。
-
如果他不能改变数据库结构,我建议他使用
CONCAT(' ', tags.id, ' ') LIKE '% 3 %'。事实上,如果他只使用'%3%',标签#13 或#34 等也会被拾取。
标签: mysql tags group-concat