请查看SQLFiddle
我有两个表来存储用户'喜欢/不喜欢的产品。我使用RIGHT JOIN
提取页面上每个玩具的喜欢和不喜欢的数量。我想知道这是否是获得此输出的合适方法:
TOY LIKES DISLIKES
ToyA 2 0
ToyB 0 0
ToyC 0 0
ToyD 1 2
ToyE 0 0
ToyF 0 0
ToyG 0 1
ToyH 1 0
ToyI 0 0
我提出的另一种方法是在表toy
中存储喜欢/不喜欢的数量,以便它不需要正确的联接,但是当有人需要额外的插入查询时票。你更喜欢哪一个?
SELECT
b.toy,
IFNULL(SUM( liketype =1 ),0)AS likes,
IFNULL(SUM( liketype =0 ),0) AS dislikes
FROM `product_review` a
RIGHT JOIN toy b
ON b.ID = a.toyid
GROUP BY b.toy
表
CREATE TABLE toy
(`ID` int, `toy` varchar(21), `like` int ,`dislike` int)
;
INSERT INTO toy
(`ID`,`toy`, `like`,`dislike`)
VALUES
(1, 'ToyA', 2, 0),
(2, 'ToyB',0 , 0),
(3, 'ToyC', 0, 0),
(4, 'ToyD', 1, 2),
(5, 'ToyE', 0, 0),
(6, 'ToyF', 0, 0),
(7, 'ToyG',0, 1),
(8, 'ToyH',0, 1),
(9, 'ToyI', 0, 0)
;
CREATE TABLE product_review
(`ID` int,`user` varchar(20), `toyid` varchar(21), `liketype` int)
;
INSERT INTO product_review
(`ID`, `user`,`toyid`, `liketype`)
VALUES
(1, 'Tom','1', 1),
(2, 'Ben', '4',0),
(3, 'Peter','1', 1),
(4, 'May','4', 0),
(5, 'May', '8',1),
(6, 'Tom','7',0),
(7, 'Paul','4', 1)
;
答案 0 :(得分:1)
如果用户投票数太多&你需要计算&多次显示投票结果,然后这种加入可能是一种开销。另一方面,将投票信息存储在单独的表中会更灵活。所以我个人更喜欢混合两种解决方案:
保持product_review
表&在玩具表中添加喜欢/不喜欢的数量,然后在product_review
表上添加一个触发器,以便在每次投票记录插入后更新toy
表中相应玩具的喜欢/不喜欢字段。这对您来说就像一个缓存,可以帮助您同时使两个解决方案受益。