【问题标题】:Mysql Join IssueMysql加入问题
【发布时间】:2011-04-03 18:01:30
【问题描述】:

您好,我需要查询方面的帮助。

我有 4 张桌子

文章 - id、category_id、user_id
类别 - id
article_category - article_id, category_id
用户 - id

文章表中的category_id用于确定主分类

现在我想获取所有文章,所以我使用下面的查询。

文章可以有多个类别。我想查看附有主要分类信息的文章列表

选择 a.*, c.title , c.slug FROM 文章 a,article_category ac,类别 c,用户 u
WHERE ac.article_id = a.category_id 应该是 ac.article_id = a.id
AND ac.category_id = c.id
AND a.user_id = u.id
AND ac.category_id = '1'

这个查询的问题是我得到了不正确的类别信息,我认为我不应该运行像下面这样的子查询来解决它

(从id = a.category_id的类别中选择标题)作为标题

谢谢

【问题讨论】:

  • WHERE ac.article_id = a.category_id,应该是 WHERE ac.category_id = a.category_id
  • 你能说得更具体点吗?您是否获得所有文章的“主要”类别信息?您的文章可以有多个类别吗?您是希望每篇文章查看一次,还是对附加的每个类别重复查看?
  • @cfreak 文章可以有多个类别。我想看一次所有文章,并附上主要类别信息

标签: mysql


【解决方案1】:

您的连接子句不正确。我已经用 ANSI 语法重新编写了它以使其更具可读性,并且JOIN 子句更加明确:

SELECT a.*, c.title , c.slug
FROM articles a
INNER JOIN article_category ac on ac.category_id = a.category_id
INNER JOIN categories c on ac.category_id = c.id
INNER JOIN users u on a.user_id = u.id
WHERE ac.category_id = '1'

顺便说一句,您正在对 users 表进行 JOIN,但未从中选择任何列,因此您可以删除该连接,除非您使用它来过滤结果。

【讨论】:

    【解决方案2】:

    从查询中删除 users 表(根本不使用),将条件从 ac.article_id = a.category_id 更改为 ac.category_id = a.category_id

          SELECT a.*, c.title , c.slug 
          FROM articles a, article_category ac, categories c
          WHERE ac.category_id = a.category_id
          AND ac.category_id = c.id
          AND ac.category_id = '1'
    

    【讨论】:

      【解决方案3】:
      select a.*, c.title, c.slug
      from articles a
      join article_category ac on a.id = ac.article_id
      join categories c on ac.category_id = c.id
      join users u on a.user_id = u.id
      where c.id = 1
      

      【讨论】:

        【解决方案4】:

        你加入 article_id=category_id,这没有意义,试试吧:

        SELECT a.*, c.title , c.slug FROM articles a, article_category ac, categories c, users u
        WHERE ac.category_id = a.category_id
        AND ac.category_id = c.id
        AND a.user_id = u.id
        AND ac.category_id = '1'
        

        【讨论】:

          猜你喜欢
          • 2011-10-14
          • 1970-01-01
          • 2016-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多