MySQL查找未删除类别的文章

时间:2017-02-02 11:35:17

标签: mysql

我正在尝试搜索不属于已删除类别的文章。我使用软删除,类别只是在数据库中标记为已删除(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时,它按预期工作。

2 个答案:

答案 0 :(得分:0)

SELECT *
FROM table_name
WHERE col_name NOT IN("<your value>");

答案 1 :(得分:0)

  

我尝试搜索不属于已删除类别的文章。我有以下数据库结构。

这听起来像NOT EXISTSNOT 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
                 );

我不知道为什么你的版本如此复杂。如果您有其他问题,则应将其视为另一个问题。