PHP - GROUP BY et ORDER BY - SQL/NoSQL - Programmation
Marsh Posté le 30-08-2007 à 11:03:07
Autre solution :
SELECT id_img, date, SUM(value) AS Somme FROM $table_images_stat WHERE date>($time_now-$clic_time) GROUP BY id_img ORDER BY Somme DESC, id_img DESC
Marsh Posté le 30-08-2007 à 13:27:47
merci pour l'info, mais sans les ' il y a une erreur.
il faudra que j'essaye la nouvelle requête
Marsh Posté le 30-08-2007 à 15:40:52
ça arrive à mysql de respecter un tant soit peu les standards ? pkoi "date" n'est pas dans le group by ? et surtout, pourquoi ça marche sans qu'il y soit ? !!!
Marsh Posté le 30-08-2007 à 17:37:31
Heu c'est pas plutot l'inverse i.e. il faut qu'un champs du group by soit dans le select.
Et puis encore j'suis pas sur parfois y'a surtout la syntaxe Oracle qu'on prends pour du SQL standard.
Marsh Posté le 30-08-2007 à 19:44:24
Non, tu as le droit de faire un group by sur un champ non sélectionné (à vérifier tout de même).
Mais par contre, le GORUP BY doit porter sur TOUTES les colonnes calculées SAUF celles qui sont résultent d'une fonction de regroupement.
Ainsi, par exemple :
Code :
|
Ce qui est parfaitement normal.
Voici ce que dit la doc de SQL Server 2005 sur le sujet (soit rigoureusement la même chose qu'Oracle) :
http://msdn2.microsoft.com/fr-fr/library/ms177673.aspx
Citation : |
Les exemples ensuite parlent d'eux-même.
Ici, un topo sur la norme SQL. On découvre que GROUP BY a été introduit avec la version 2 de la norme "SQL 2".
http://sql.developpez.com/sqlaz/ensembles/#L1
Citation : |
(c'est un peu chiant, c'est bourré de fautes de frappes mais bon
Marsh Posté le 30-08-2007 à 19:48:27
Heu a vrai dire peut etre que si c'est obligatoire, c'est fait tout seul...
En tout cas chose sur, dans Oracle on ne peut pas faire de group by sur un champs nom selectionné. Mais bon c'est oracle einh. Ca supporte pas les left outer join à la base donc bon
Marsh Posté le 30-08-2007 à 19:55:48
Possible pour Oracle, c'est vrai que sur certains points il est particulièrement nul.
Maintenant je me référence surtout à la syntaxe de SQL Server 2005, car c'est vraiment très proche de la norme maintenant.
De plus, pour le group by, ça c'est sûr, j'ai toujours appris comme ça depuis le début.
Sinon, MySQL fait en fait un truc très sympa et plus poussé :
SELECT MIN(ID) id, nom
FROM produits
=> Il va te ramener l'ID du produit qui a le plus petit ID avec son nom. Chose qui est horrible à faire avec la norme. En soit, c'est cool, mais absolument pas standard.
Marsh Posté le 31-08-2007 à 00:19:04
en tout cas, la requete de rufo fonctionne bien.
Pour MySQL, il n'est pas nécessaire de mettre le "date" dans le Group By, j'utilise le "date" uniquement pour prendre les dernières stat.
Marsh Posté le 30-08-2007 à 10:27:44
Salut à tous,
Je fait une stat du nombre d'images la plus vue en fonction du temps (la plus vue des 15 dernières minutes, 30...) et j'ai fait la requête suivante, mais quelque chose ne tourne pas rond, une idée ?
le $time_now-$clic_time c'est pour prendre en compte uniquement les stats des 15 dernières minutes (ou 30...)
le id_img DESC sert à obtenir l'image la plus récente parmi celle qui ont le même total de visite
Merci de votre aide.