0

我正在使用嵌套集模型处理类别。我的数据库设计是这样的

  • 表 1:类别(id、lft、rgt、count1、count2)
  • 表 2:Items1 (id, catid, .....) -- catid 是类别表中的 id
  • 表 3:Items2 (id, item1_id, ....) -- item1_id 是 Items 1 表中的 id

现在由于 Items1 有 catid 列,我可以使用下面的 SQL 使用嵌套集模型轻松计算树下的项目数:

        SELECT 
            parent.id, COUNT(items.id) as item_count
        FROM 
            categories AS node ,
            categories AS parent,
            items1 AS items
        WHERE 
            node.nleft BETWEEN parent.nleft AND parent.nright 
            AND node.id = items.catid
            AND items.published = 1
        GROUP BY 
            parent.id
        ORDER BY 
            node.nleft;

并从该 SQL 更新每个类别。

现在有人可以帮助我如何将树中每个类别的项目数从 items2 表更新到 count2 列?

感谢你的帮助。

4

2 回答 2

0

像这样的东西会设置为引用类别count2中的行数:items2

update 
  categories 
set 
  count2=(
    select count(*) from items2 where items2.item1_id in (
      select id from items1 where items1.catid=categories.id
    )
  )

要设置count2两者中的行数items1items2引用该类别:

update 
  categories 
set 
  count2=(
    select count(*) from items2 where items2.item1_id in (
      select id from items1 where items1.catid=categories.id
    ) + 
    select count(*) from items1 where items1.catid=categories.id
  )
于 2012-12-19T19:02:42.127 回答
0

感谢 MiMo 的回复。最后,我可以自己做。

我所做的是,

  1. 在 items1 表中添加了一个新列 item22_count,并在将新记录插入 items2 表时更新它。

  2. 现在我像这样修改了第一个查询以获得 items2 计数。

    SELECT 
        parent.id, sum(items2_count) as item2_count
    FROM 
        categories AS node ,
        categories AS parent,
        items1 AS items
    WHERE 
        node.nleft BETWEEN parent.nleft AND parent.nright 
        AND node.id = items.catid
        AND items.published = 1
    GROUP BY 
        parent.id
    ORDER BY 
        node.nleft;
    

我知道这会增加更新列的开销,但这是有充分理由的,我没有找到其他方法。无论如何感谢您的回答。

于 2012-12-20T11:35:17.170 回答