我正在尝试搜索不属于已删除类别的文章。我使用软删除,类别只是在数据库中标记为已删除(flag_deleted = 1)。删除类别时,子项也不会标记为已删除。这就是为什么可能将文章分配给未标记为已删除的类别,但直接分配的类别是已删除类别的子类。
如果某个类别是已删除类别的子类,我找到了一个搜索树的解决方案,以便检查。
我有以下数据库结构。
article
------
id
category_id
title
flag_deleted
category
------
id
id_parent
name
flag_deleted
我使用以下查询:
SELECT
`ID`,
`title`,
FROM
`article` a
WHERE
`flag_deleted`=0
AND
(
SELECT sum(case when T2.flag_deleted = 1 then 1 else 0 end) as deleted_count
FROM (
SELECT
@r AS _id,
(SELECT @r := id_parent FROM category WHERE id = _id) AS id_parent,
@l := @l + 1 AS lvl
FROM
(SELECT @r := id_category, @l := 0) vars,
category m
WHERE @r <> 0
) T1
JOIN
category T2
ON
T1._id = T2.ID
) = 0
此解决方案的问题是,我无法访问子查询中的id_category。当我在子查询中手动id而不是id_category时,它按预期工作。
答案 0 :(得分:0)
SELECT *
FROM table_name
WHERE col_name NOT IN("<your value>");
答案 1 :(得分:0)
我尝试搜索不属于已删除类别的文章。我有以下数据库结构。
这听起来像NOT EXISTS
或NOT IN
:
select a.*
from articles a
where not exists (select 1
from category c
where c.id = a.category_id and c.flag_deleted = 1
);
我不知道为什么你的版本如此复杂。如果您有其他问题,则应将其视为另一个问题。