我正在使用嵌套集模型处理类别。我的数据库设计就像这样
现在,由于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列?
感谢您的帮助。
答案 0 :(得分: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
设置为引用该类别的items1
和items2
中的行数:
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
)
答案 1 :(得分:0)
感谢MiMo的回复。最后,我能够自己做。
我做的是,
在items1表中添加了新的列item22_count,并在将新记录插入items2表时更新它。
现在我修改了第一个这样的查询来获取items2 count。
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;
我知道这会增加更新列的开销,但这是有充分理由的,我找不到其他方法。无论如何,谢谢你的回答。