2017-02-02 7 views
0

私は削除されたカテゴリにない記事を検索しようとしています。私はソフト削除を使用し、カテゴリーはデータベースで削除されたものとしてマークされます(flag_deleted = 1)。カテゴリが削除されると、子は削除済みとしてマークされません。それは記事が削除済みとしてマークされていないカテゴリに割り当てられている可能性がありますが、直接割り当てられたカテゴリは既に削除されたカテゴリの子です。MySQLは削除されたカテゴリにない記事を見つける

カテゴリが削除されたカテゴリの子である場合、ツリーを検索してチェックする解決策が見つかりました。

私は以下のデータベース構造を持っています。

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_categoryの代わりにidを手動で入力すると、期待通りに機能します。

+1

あなたの質問を編集し、あなたがしようとしていることを説明してください。 –

答えて

0
SELECT * 
FROM table_name 
WHERE col_name NOT IN("<your value>"); 
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 
       ); 

私はあなたのバージョンが非常に複雑である理由はわかりません。別の質問がある場合は、と別の質問をしてください。

+0

問題は、カテゴリが削除されると、子が削除済みとしてマークされていないことです。私は直接割り当てられたカテゴリだけをチェックすることはできません。親カテゴリが削除済みとしてマークされているかどうかを見つけるために、カテゴリツリー全体を検索する必要があります。 –

関連する問題