【发布时间】:2013-07-13 19:28:03
【问题描述】:
我目前陷入困境。场景是这样的。我有可能与多个类别相关联的产品。数据结构如下图:
Products Table:
product_id name
1 Lemon
2 Kiwis
3 Cheese
产品分类表
product_id category_id
1 1
1 2
1 3
2 1
2 3
3 2
3 4
类别表(查询中不需要,但在此处添加以帮助可视化正在发生的事情)
category_id name
1 Fruit
2 Yellow
3 Round
4 Dairy
我在这里苦苦挣扎的是,最初我想获得水果类别(类别 id 1)中的所有产品,但我还想检查水果是否是黄色的。请记住,黄色不会是唯一的过滤器,有时我会想要返回黄色和橙色的水果,但是由于奶酪是黄色的,我不能返回它,因为它不是水果。然而,为了让事情变得更容易一些,我始终知道我将以水果类别为基础。
数据库结构不能像opencart数据库结构那样改变。
这是我的尝试:
SELECT GROUP_CONCAT(DISTINCT p2c2.category_id SEPARATOR ',') as categories
FROM oc_product_to_category p2c
LEFT JOIN oc_product p ON (p.product_id = p2c.product_id)
LEFT JOIN oc_product_to_category p2c2 ON (p.product_id = p2c2.product_id)
WHERE p2c.category_id IN ('1','2')
除了会返回 Cheese 之外,这种方法有效。
注意:我使用 Group Concat 是因为在所有这一切结束时,我的目标不是返回与这些类别匹配的产品,而是基于过滤器,我想从匹配的产品中返回另一个类别列表标准。所以:
场景:
获取符合类别条件的产品 返回这些产品的类别。
我们将不胜感激。
【问题讨论】:
标签: mysql left-join group-concat relational-division