选择/更新所有子状态= 0的位置

时间:2011-12-08 16:54:42

标签: mysql

我有表categories

categories_id | categories_status | parent_id
     1                  1               0
     2                  1               0
     3                  0               1
     4                  0               2
     5                  1               1
     6                  0               2

如何选择和更新状态为0的所有子类别的类别的状态(在此示例中,它只是categories_id 2)?我需要在PHP中集成它。

提前致谢,

亚历

2 个答案:

答案 0 :(得分:1)

update categories,
(
  select parent_id, sum(categories_status) as cnt
  from categories
  where parent_id!=0
  group by parent_id
  having cnt=0 
) as child_cat
set ? = ?   /* what do you want to update? */
where categories.categories_id=child_cat.parent_id

可能你不必使用PHP,SQL会这样做。

答案 1 :(得分:1)

我在MSSQL上对此进行了测试,因此语法可能略有不同,但我相信这就是你所追求的:

SELECT * FROM <table_name> WHERE parent_id NOT IN
(
    SELECT parent_id
    FROM <table_name>
    WHERE categories_status = 1
    GROUP BY parent_id
)

更新查询:

UPDATE <table_name>
SET categories_status = 1
WHERE parent_id NOT IN 
(
    SELECT parent_id
    FROM <table_name>
    WHERE categories_status = 1
    GROUP BY parent_id
)

我们的想法是隔离您要从基本查询中排除的parent_id。您可以使用子查询来实现这一目标。