[英]How to get rid of null values in right join
我有三张桌子
分类
id
name
子类别
id
name
category_id
子类别_三
id
name
sub_categories
现在,我想在下拉列表中显示这些表中的所有数据(名称),要执行的查询以及如何使用foreach或mysqli_fetch_assoc()在视图(嵌套循环)上设置它们。
我正在使用此查询
$query="SELECT a.c_name, a.id, b.sc_name, b.id, c.sct_name, c.id
FROM categories a
right JOIN sub_categories b ON a.id=b.id
right JOIN sub_categories_three c ON b.id=c.id";
但是此查询返回的空值也填充了我的下拉标记中不必要的空间。
这是显示我不想要的null
值的图像:
因此,所有您不需要第一张桌子。 您可以将它们聚在一起! 这导致以下模式:
create table category
(
id int primary key,
name varchar(255) not null,
superior int
);
到现在为止还挺好。 现在我们需要一些伪数据。 为此,执行以下语句:
insert into category (id, name, superior)
values (1, 'Category 1', null),
(2, 'Category 2', 1),
(3, 'Category 3', 1),
(4, 'Category 4', 1),
(5, 'Category 5', 1),
(6, 'Category 6', 2),
(7, 'Category 7', 2),
(8, 'Category 8', 2),
(9, 'Category 9', 2),
(10, 'Category 10', 3),
(11, 'Category 11', 3),
(12, 'Category 12', 3),
(13, 'Category 13', 3),
(14, 'Category 14', 4),
(15, 'Category 15', 4),
(16, 'Category 16', 7),
(17, 'Category 17', 7),
(18, 'Category 18', 8),
(19, 'Category 19', 8),
(20, 'Category 20', 8);
现在,您需要做的就是递归SQL语句。 在这种情况下,我需要类别7及其所有子类别:
with recursive subcategory as (
select id, name, superior
from category
where id = 7
union
select c.id, c.name, c.superior
from category c
inner join subcategory s on s.id = c.superior
)
select *
from subcategory;
结果为(CSV格式):
id, | name, | superior
---------------------------
7, | Category 7, | 2
16, | Category 16, | 7
17, | Category 17, | 7
我想就是这样解决您的问题的。
干杯,敬请期待!
西莱姆
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.