gpt4 book ai didi

mysql - 通过将它们合并为一个来加速以下查询

转载 作者:行者123 更新时间:2023-11-29 02:24:07 24 4
gpt4 key购买 nike

我需要找到一种方法将两个查询合并为一个。

这是我正在使用的表的结构:(还有关于内容和评级的其他字段,但我没有添加它们,因为这不需要它们。

-- Create syntax for TABLE 'contents'
CREATE TABLE `contents` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`rating` decimal(5,4) DEFAULT '0.0000',
`ratingsCount` int(8) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'ratings'
CREATE TABLE `ratings` (
`what` int(11) DEFAULT NULL,
`time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`rating` decimal(3,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

自从上次我在这里询问有关堆栈溢出的问题后,有人告诉我编写我现在正在使用的代码。在这里:

db.query("SELECT AVG(rating) `avg`, COUNT(rating) cnt FROM `ratings` WHERE what = ?", [req.params.id], function(err, avg) {
db.query("UPDATE contents SET `rating` = ?, `ratingsCount` = ? WHERE id = ?", [avg[0].avg, avg[0].cnt, req.params.id], function() { });
});

最佳答案

您可以使用 UPDATE/JOIN 组合在数据库的单次往返中完成;

UPDATE contents c 
JOIN (
SELECT what, AVG(rating) rating, COUNT(rating) ratingsCount
FROM ratings WHERE what = ? GROUP BY what
) r
ON c.id = r.what
SET c.rating = r.rating, c.ratingsCount = r.ratingsCount

An SQLfiddle to test with .

子查询将找到“what”值的平均值/计数,外部查询将加入该信息以更新内容

关于mysql - 通过将它们合并为一个来加速以下查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26336006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com