我需要查看一些用 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/