2 votes

Signification du code SQL dans le code révisé

J'ai besoin de revoir le code d'une application de test écrite en PHP/MySQL. L'auteur de ce code a écrit trois requêtes SQL. Je n'arrive pas à comprendre s'il a voulu optimiser les performances de ces requêtes.

 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 ");

Les résultats de la première requête ne sont pas utilisés dans l'application.

2voto

Jon Freedman Points 4411

La 1ère requête est invalide, car elle sélectionne 2 colonnes + 1 agrégat et ne regroupe que par 1 des 2 colonnes sélectionnées.

La deuxième requête permet d'obtenir un compte de toutes les lignes dans le fichier logs par date dans les 10 derniers jours depuis 2006-02-03

La troisième requête consiste à obtenir un compte de toutes les valeurs distinctes d'ip à partir de logs au cours des 10 derniers jours depuis le 2006-02-03 et pourrait être mieux écrit comme suit

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

S'il s'agissait d'une soumission pour un emploi, vous pourriez vous demander pourquoi la date limite n'est pas transmise comme une variable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X