复杂的子查询 - 这可能吗?

时间:2010-09-18 18:00:25

标签: mysql select many-to-many subquery sql-like

我有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)

我不知道它是否可能,但我真的想使用单个查询(带有子查询)而不是两个不同。

1 个答案:

答案 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_tagsjunction 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'