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

发布于 2024-09-24 00:28:12 字数 440 浏览 6 评论 0原文

我有两张表:一张存储标签,另一张存储文章。有一种模式“按标签获取文章”,它基本上获取所有标记为“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)

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

I've got 2 tables: one stores tags, the other stores articles. There's a mode "Get articles by tag", which basically takes all articles, tagged "x". In my articles table I use a filed, called Tags, that stores data in such pattern 'tag1, tag2, tag3, ...'.

So I want to get everything work by just a single query like that:

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)

I don't know if it's even possible, but I'd really like to use a single query (with a sub-query) instead of two different.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

中性美 2024-10-01 00:28:12

这是在数据库中存储多对多关系的错误方法。

您应该有这样的架构:

     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是一个连接表。现在,您可以使用给定标签获取所有文章(如果您知道 tag_id,您甚至不需要 JOIN):

    SELECT article_id, ...
      FROM articles_tags
INNER JOIN tags ON tags.tag_id = articles_tags.tag_id
     WHERE tag_name = 'TAGNAME'

This is the wrong way to store a many-to-many relationship in a database.

You should have a schema like:

     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] = primary key, [FK] = foreign key

Where articles_tags is a junction table. Now, you can get all articles with a given tag with (if you know the tag_id you won't even need the JOIN):

    SELECT article_id, ...
      FROM articles_tags
INNER JOIN tags ON tags.tag_id = articles_tags.tag_id
     WHERE tag_name = 'TAGNAME'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文