【问题标题】:join multiple relation tables连接多个关系表
【发布时间】:2016-08-04 05:06:41
【问题描述】:

我有饭菜

food_id     food_name  

  1           chappathi

和另一个表类别

category_id    category_name

  1              non-veg
  2              nutrition

和一个关系表 food_category

food_id    category_id

  1          1
  1          2

其中food_id是food表中food_id的外键,category_id是category表中category_id的外键,一个食物没有分类 我试过了

 $sql=      "SELECT * FROM food f
            LEFT JOIN food_category fc
            ON f.food_id=fc.food_id
            LEFT JOIN category c
            ON fc.category_id=c.category_id"

它给了我不止一种食物,我想要的是

item name: chappathi
categories: non-veg, nutrition
------------------------------
second row of result set if there is any

【问题讨论】:

  • 您的预期结果是什么?
  • 我可以看到您的查询是正确的,它将为您提供多条记录。因为它在 food_category 表中关联了两个类别。
  • 如果结果表中有任何类别,我只想要 id 为 1 的食物项,我想将其作为数组或其他内容获取到食物项 1,因此我可以将其显示为 chappathi有营养和非蔬菜类@SIDU
  • 你的问题很清楚,格式也很好。如果您将预期结果添加到您的问题中会更容易。
  • 我添加了@SIDU

标签: php mysql join left-join


【解决方案1】:

试试这个:

SELECT f.food_name AS item_name,  GROUP_CONCAT(c.category_name SEPARATOR ', ') AS categories
FROM food f
LEFT JOIN food_category fc ON f.food_id=fc.food_id
LEFT JOIN category c ON fc.category_id=c.category_id
GROUP BY f.id

希望对你有帮助。

【讨论】:

  • 感谢大家的回答@all
【解决方案2】:

【讨论】:

    【解决方案3】:

    查询应该如下所示来获取食物名称及其类别列表。

     SELECT f.food_name as ItemName,  
    STUFF(
             (SELECT DISTINCT ',' + c.category_name
              FROM  food 
              LEFT JOIN food_category fc on fc.food_id= food.food_id
              LEFT JOIN category c ON fc.category_id =c.category_id                        
              FOR XML PATH ('')), 1, 1, '')  AS Categories
    FROM food f                    
     group by f.food_id, f.food_name
    

    请检查一下。

    【讨论】:

      【解决方案4】:

      你需要的是 group_concat:

      SELECT f.food_name, group_concat(c.category_name) AS Cat
      FROM food AS f
      LEFT JOIN food_category AS fc ON f.food_id = fc.food_id
      LEFT JOIN category AS c ON c.category_id = fc.category_id
      GROUP BY f.food_id
      

      【讨论】:

      • GROUP BY 1,2 非常特定于表的当前内容。您应该始终按列名分组。
      • 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“group_concat(c.category_name) AS Cat FROM food AS f LEFT JOIN food_categ”附近使用正确的语法@SIDU
      • @Ranjith 我用我的测试过,没有错误,你的实际情况有任何列名拼写错误?
      猜你喜欢
      • 2019-08-22
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2017-09-04
      • 2017-06-23
      • 2012-06-15
      相关资源
      最近更新 更多