MySQL COUNT(*) 来自相关的 "visits"表

标签 mysql

我一直在处理 MySQL 查询,想知道是否有更好的方法来执行此操作(没有相关子查询等...)。有问题的查询是

SELECT 
   (SELECT COUNT(*) as num_visits FROM visit WHERE data_type='gallery'
    and gallery.id=visit.object_id) as num_visits, gallery.id
FROM gallery
    ORDER BY num_visits desc

表结构的相关部分是

gallery
-------
id

visit
-----
id
data_type --> enum('gallery','etc')
object_id --> ties to various tables

如有任何帮助,我们将不胜感激。

最佳答案

   SELECT COUNT(v.object_id) as num_visits, g.id
     FROM gallery g
LEFT JOIN visit v ON g.id=v.object_id AND v.data_type='gallery'
 GROUP BY g.id
 ORDER BY num_visits DESC

但更好的解决方案(从性能角度来看)是预先计算访问量并将其存储在 gallery 表(或其他表)中

关于MySQL COUNT(*) 来自相关的 "visits"表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922813/

相关文章:

MySQL 5.7 - 增加 JSON 中的数字

mysql - Docker 故障转移 : Redis, MySQL 和 Nginx

mysql - 如果我正在访问的字段是复合索引的一部分,我是否仍能从仅引用其中一个字段的索引中受益?

mysql - Node.js - 获取所有已连接客户端 IP 地址的列表?

php - 关于用户名和密码安全

mysql - 选择查询两个科目中分数至少为 60 的学生姓名

php无法执行mysql查询转义

c# - 如何在 mySQL 中使用 LINQ to SQL

mySQL 替换所有字符串,无论字段名称如何?

mysql - 外连接两个select语句的输出-mysql