sql - 审查代码中 SQL 代码的含义

标签 sql mysql

我需要查看一些用 PHP/MySQL 编写的测试应用程序代码。 此代码的作者编写了三个 SQL 查询。 我不明白,如果他在这里指的是一些性能优化?

 DB::fetch("SELECT COUNT( *  ) AS count, `ip`,`datetime`
FROM `logs`
WHERE `datetime` > ('2006-02-03' - INTERVAL 10 DAY)
GROUP BY `ip`
ORDER BY `datetime` DESC");

$hits = DB::fetchAll("SELECT COUNT( *  ) AS count, `datetime`
FROM `logs`
WHERE `datetime` > ( '2006-02-03' - INTERVAL 10
DAY ) AND `is_doc` = 1
GROUP BY `datetime`
ORDER BY `datetime` DESC");

$hosts = DB::fetchAll("SELECT COUNT( *  ) AS hosts , datetime
FROM (

SELECT `ip` , datetime
FROM `logs`
WHERE `is_doc` = 1
GROUP BY `datetime` , `ip`
ORDER BY `logs`.`datetime` DESC
) AS cnt
WHERE cnt.datetime > ( '2006-02-03' - INTERVAL 10
DAY )
GROUP BY cnt.datetime
ORDER BY datetime DESC ");

第一个查询的结果未在应用程序中使用。

最佳答案

第一个查询无效,因为它选择了 2 列 + 1 个聚合并且仅按所选 2 列中的 1 进行分组。

第二个查询是获取自 2006 年 2 月 3 日以来过去 10 天内 logs 中所有行的计数

第三个查询是从 logs 获取自 2006-02-03 以来过去 10 天内所有不同 ip 值的计数,可以更好地写成

SELECT COUNT(DISTINCT ip) hosts, datetime
FROM logs
WHERE is_doc = 1
GROUP BY datetime
ORDER BY datetime desc

如果这是对作业 iterview 的提交,您可能想知道为什么不将截止日期作为变量传递。

关于sql - 审查代码中 SQL 代码的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3608935/

相关文章:

mysql - PHP/Mysql 如何将另一个表加入到搜索查询的匹配中

sql - T-SQL 结果写入列

python - Django 创建 ManyToMany 字段时遇到问题

具有父子关系的mysql数据库

sql - 什么时候应该在 SQL Server 中对日志文件使用自动收缩?

java - 数据的数据库结构

java - sprint namedParameterJdbcTemplate batchUpdate with in 子句

php - 如何将年份转换为unix时间戳?

mysql - 只计算 MySQL 查询中连接的不同元素

mysql - 声明变量MySQL触发器