簡體   English   中英

在 MYSQL 中的父表中存儲子項數的最佳方法

[英]Best way to store number of children in parent table in MYSQL

我試圖在MYSQL中實現一個簡單的產品系統,其中一個產品可以有很多評論。 引用產品表的評論表中有一個外鍵product_id。 我想將產品的評論數量存儲為產品表中的一個字段以進行排序。 可以通過像這樣在評論表上創建兩個觸發器來實現

DELIMITER $$
CREATE TRIGGER comment_incr_trig
AFTER INSERT ON `COMMENT` FOR EACH ROW
begin
    UPDATE PRODUCT SET NUM_OF_COMMENT = NUM_OF_COMMENT + 1 WHERE ID = NEW.PRODUCT_ID;
END;
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER comment_decr_trig
AFTER DELETE ON `COMMENT` FOR EACH ROW
begin
    UPDATE PRODUCT SET NUM_OF_COMMENT = NUM_OF_COMMENT - 1 WHERE ID = OLD.PRODUCT_ID;
END;
$$
DELIMITER ;

但是,MYSQL中有沒有什么機制可以不使用觸發器直接將父表中的一個字段綁定到子表的數量?

非常感謝。

我通常建議不要存儲此類派生信息 您可以在需要時輕松地在查詢中動態計算。

為了避免再次重復輸入相同的查詢,一種解決方案是創建一個視圖:

create view product_view(id, num_of_comments) as
select
    p.id,
    c.num_of_comments
from product p
left join (
    select product_id, count(*) num_of_comments
    from comment
    group by product_id
) c on c.product_id = p.id

您可以使用來自product表的更多列擴展視圖(我無法添加更多列,因為您的問題中顯示的唯一列是product(id) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM