如何清除右联接中的空值

时间:2019-07-03 13:40:13

标签: php html mysql

我有三张桌子

类别

id
name

Sub_Categories

id
name
category_id

Sub_categories_three

id
name
sub_categories

现在,我想在下拉列表中显示这些表中的所有数据(名称),要执行的查询以及如何使用foreach或mysqli_fetch_assoc()在视图(嵌套循环)上设置它们。 / p>

我正在使用此查询

$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值的图像:

image

1 个答案:

答案 0 :(得分:0)

因此,所有第一者不需要3个桌子。您可以将它们聚在一起! 这将导致以下模式:

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

这就是我想解决您的问题的方式。

This article might help you as well.

干杯,敬请期待!

silenum