已审查代码中SQL代码的含义

时间:2010-08-31 12:21:13

标签: 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 ");

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

1 个答案:

答案 0 :(得分:2)

第一个查询无效,因为它选择了2列+ 1个聚合,并且只选择了2列中的1个。

第二个查询在2006-02-03以来的最近10天内按日期计算了logs中所有行的计数

第三个查询是在2006-02-03以来的最近10天内从logs得到所有不同ip值的计数,可以更好地写为

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

如果这是一份工作提交,那么您可能想知道截止日期为何不作为变量传递。