【发布时间】:2019-04-04 17:58:02
【问题描述】:
我正在尝试创建一个基于 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 服务器中不可用)
对不起,我的英语不好。 感谢您的帮助。
【问题讨论】:
-
考虑在应用程序代码中处理数据显示相关需求(例如:PHP)。
-
您没有任何关于数据库层次结构的信息,因此您必须通过 PHP 创建它或查看您的表结构,但您仍然需要 PHP
-
为什么是
Man -> 3A5years -> T-Shirt而不是T-Shirt -> 3A5years -> Man?您的表格中没有关于类别的级别的信息。他们都看着同一水平。不是吗?您的数据库建模似乎不完整。 -
是的...我可以在 PHP 中处理它。但这意味着循环内有一些查询,这是一种不好的方法。我想知道只有一个好的查询就可以做到这一点。
-
什么版本的 MySQL? 5.x 还是 8.x?好像是 5.x。
标签: php sql left-join mariadb inner-join