【问题标题】:Fetching product categories in one row with product info使用产品信息连续获取产品类别
【发布时间】:2011-11-18 10:39:24
【问题描述】:

我有 3 张桌子

products         categories       products_categories
------------     -------------    --------------------
product_id       category_id      product_id
product_title    category_title   category_id

如 db 架构所示,每个产品都可以属于多个类别。 我加入这三个表以获得最后插入的三个产品的列表。

SELECT p.product_id, 
      p.product_title, 
      c.category_id, 
      c.category_title 
FROM products p
INNER JOIN products_categories pc ON p.product_id = pc.product_id
INNER JOIN categories c ON pc.category_id = c.category_id GROUP BY p.product_id LIMIT 3

通过上述查询,我​​得到了产品,但产品属于的第一个类别。

我的问题是,是否可以通过修改查询来获取每个产品所属的所有类别,以及产品信息?

或者唯一的方法是在获取列表以获取其类别的同时对每个产品执行另一个查询?

【问题讨论】:

  • 改用 GROUP BY pc.product_id。不过看起来确实是正确的。

标签: php mysql sql


【解决方案1】:

你可以试试:

SELECT p.product_id, p.product_title,
       GROUP_CONCAT(c.category_title)
FROM products p
  INNER JOIN products_categories pc ON p.product_id = pc.product_id
  INNER JOIN categories c ON pc.category_id = c.category_id
GROUP BY p.product_id

查看GROUP_CONCAT语法here

【讨论】:

  • 我现在无法测试它,但它看起来应该可以解决问题。我会告诉你进展如何。
  • @Khronos:希望它适合你;)
  • 正是我想要的!感谢您的回答! ;)
【解决方案2】:

不要使用“分组依据”。然后在您的 PHP 代码组中手动到 product_id 并收集所有类别。

【讨论】:

  • 如果我不在 sql 中使用 group by,查询将返回相同产品的行,不是吗?我想要最后 3 种不同的产品。
猜你喜欢
  • 2012-01-07
  • 2019-12-22
  • 1970-01-01
  • 2018-02-07
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多