我有2个表:一个存储标签,另一个存储文章。有一种模式“按标签获取文章”,它基本上采用标记为“x”的所有文章。在我的文章表中,我使用了一个名为Tags
的字段,它以“tag1,tag2,tag3,...”模式存储数据。
所以我想通过一个像这样的查询来完成所有工作:
SELECT *,
(SELECT tagname
FROM `tags_table`
WHERE tagurn LIKE 'x') as TAGNAME
FROM `articles_table`
WHERE (Tags LIKE 'TAGNAME,%' OR Tags LIKE '%, TAGNAME' ... and so on)
我不知道它是否可能,但我真的想使用单个查询(带有子查询)而不是两个不同。
答案 0 :(得分:6)
这是在数据库中存储多对多关系的错误方法。
你应该有一个类似的架构:
articles: [PK] article_id, ... (should have no reference to tags)
tags: [PK] tag_id, tag_name, ...
articles_tags: [FK] article_id, [FK] tag_id
[PK]
=主键,[FK]
=外键
articles_tags
是junction table的位置。现在,您可以获取带有给定标记的所有文章(如果您知道tag_id
,您甚至不需要JOIN
):
SELECT article_id, ...
FROM articles_tags
INNER JOIN tags ON tags.tag_id = articles_tags.tag_id
WHERE tag_name = 'TAGNAME'