将以下查询合并为一个,从而加快查询速度

用户名

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

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

-- 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() { });
});
约阿希姆·伊萨克森(Joachim Isaksson)

您可以使用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

要使用进行测试的SQLfiddle

子查询将找到“ what”值的平均值/计数,外部查询将仅将该信息连接起来进行更新contents

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将以下查询合并为一个,从而加快查询速度

来自分类Dev

将以下查询合并为一个,以加快查询速度

来自分类Dev

如何将以下两个查询合并为一个结果?

来自分类Dev

MySQL对两个不同索引的查询速度很快,但是合并为一个查询的速度很慢。为什么?

来自分类Dev

将2个查询合并为一个查询

来自分类Dev

将SQL查询合并为一个查询

来自分类Dev

将单独的查询合并为一个查询

来自分类Dev

将多个子查询合并为一个查询

来自分类Dev

将2个不同的查询合并为一个

来自分类Dev

将两个查询合并为一个

来自分类Dev

将2个sql查询合并为一个

来自分类Dev

将2个SQL查询合并为一个

来自分类Dev

将多个SUM查询合并为一个结果

来自分类Dev

将SQL查询合并为一个

来自分类Dev

将多个mysql查询合并为一个结果

来自分类Dev

将许多查询合并为一个

来自分类Dev

将SQL查询合并为一个

来自分类Dev

将查询记录合并为一个

来自分类Dev

将多个相同的SQLite查询合并为一个

来自分类Dev

MySQL将多个查询合并为一个

来自分类Dev

将多行合并为一个查询

来自分类Dev

这些查询可以合并为一个吗?

来自分类Dev

将单独的查询结果合并为一个结果

来自分类Dev

将来自同一表的2个查询合并为一个linq查询

来自分类Dev

如何将这两个linq查询合并为一个查询?

来自分类Dev

可以将这3个查询合并为一个MySQL查询吗?

来自分类Dev

将两个查询合并为一个子查询

来自分类Dev

SQL:将两个查询合并为一个查询

来自分类Dev

如何将这两个单独的聚合查询合并为一个查询?