我正在尝试基于MariaDB表创建菜单。 我们有一个关联表,可以与其他表连接
#ass_products_categories
product_id | category_id
-------------------------
1 | 1 <- GENDER
1 | 3 <- AGE
1 | 16 <- TYPE
2 | 2
2 | 3
2 | 16
3 | 2
3 | 4
3 | 17
4 | 1
4 | 2
4 | 3
4 | 16
显然,列引用了产品表和类别表
#products
id | name | qty | is_published
---------------------------------------
1 | T-Shirt Black | 10 | 1
2 | Long Dress | 0 | 1
3 | T-Shirt Blue | 10 | 0
4 | T-Shirt Red | 10 | 1
#categories
id | name | tipology_id
------------------------------
1 | Man | 1 <- GENDER
2 | Woman | 1
3 | 3 a 5 years | 2 <- AGE
4 | 6 a 7 years | 2
16 | T-Shirt | 4 <- TYPE
17 | Dress | 4
这是我期望的输出。
[Man]
---- [3 A 5 years]
--------- T-Shirt
[Woman]
---- [6 a 7 years]
--------- T-Shirt
--------- Dress
我可以使用PHP和很多循环来做到这一点,但我知道只有通过良好的查询才能做到这一点。但是我确实陷入了很多左联接和内联接。
重点是:如果某个类别中没有发布任何产品,或者该类别中的所有产品的数量均为0,则该类别不应出现在菜单中。我找到的最接近的方法是WITH,但是在MariaDB中(至少在主机MariaDB服务器中)无法使用/
对不起,我的英语不好。 感谢您的帮助。
答案 0 :(得分:2)
这是一个非常复杂的操作,但仅用于联接查询的想法。 Check here
SELECT DISTINCT gender.name,
age.name,
type.name
FROM ass_products_categories a
JOIN products p
ON p.id = a.product_id and is_published = 1
JOIN (SELECT c.name,
product_id
FROM ass_products_categories pc
JOIN categories c
ON c.id = pc.category_id
AND c.tipology_id = 1) gender
ON gender. product_id = a.product_id
JOIN (SELECT c.name,
product_id
FROM ass_products_categories pc
JOIN categories c
ON c.id = pc.category_id
AND c.tipology_id = 2) age
ON age.product_id = a.product_id
JOIN (SELECT c.name,
product_id
FROM ass_products_categories pc
JOIN categories c
ON c.id = pc.category_id
AND c.tipology_id = 4) type
ON type.product_id = a.product_id