Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1441 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  PHP - GROUP BY et ORDER BY

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP - GROUP BY et ORDER BY

n°1606141
polo7
Posté le 30-08-2007 à 10:27:44  profilanswer
 

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 ?
 

Code :
  1. SELECT id_img, date, SUM(value) FROM $table_images_stat WHERE date>($time_now-$clic_time) GROUP BY id_img ORDER BY 'SUM(value)' DESC, id_img DESC


 
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.

mood
Publicité
Posté le 30-08-2007 à 10:27:44  profilanswer
 

n°1606148
casimimir
Posté le 30-08-2007 à 10:43:24  profilanswer
 

virer les quotes autours de sum(value) dans ton order by

n°1606158
rufo
Pas me confondre avec Lycos!
Posté le 30-08-2007 à 11:03:07  profilanswer
 

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

n°1606267
polo7
Posté le 30-08-2007 à 13:27:47  profilanswer
 

merci pour l'info, mais sans les ' il y a une erreur.
il faudra que j'essaye la nouvelle requête

n°1606287
polo7
Posté le 30-08-2007 à 14:14:09  profilanswer
 

la requête semble fonctionner, merci bien !!!

n°1606347
MagicBuzz
Posté le 30-08-2007 à 15:40:52  profilanswer
 

ç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 ? !!!


Message édité par MagicBuzz le 30-08-2007 à 15:41:06
n°1606455
MEI
|DarthPingoo(tm)|
Posté le 30-08-2007 à 17:37:31  profilanswer
 

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. :D


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1606512
MagicBuzz
Posté le 30-08-2007 à 19:44:24  profilanswer
 

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 :
  1. SELECT count(*) cpt, abs(qte) absqte, sum(prix), nom FROM trucmuche GROUP BY abs(qte), nom


 
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 :


Spécifie les groupes sur lesquels positionner les lignes de sortie. Si les fonctions d'agrégation sont comprises dans la clause SELECT <select list>, GROUP BY calcule une valeur de résumé pour chaque groupe. Lorsque GROUP BY est spécifiée, vous devez inclure dans la liste GROUP BY chaque colonne de toute expression de non-agrégation figurant dans la liste de sélection, ou l'expression GROUP BY doit correspondre exactement à l'expression figurant dans la liste de sélection.


 
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 :


NOTA :
 
 
La présence de la clause GROUP BY est nécessaire dès que la clause de sélection, ou le filtre WHERE, ou encore les jointures comportent simultanément des calculs d'agrégation et la présence de colonnes de table hors de calculs d'agrégation.  
De plus, outes les colonnes représentées hors des calculs d'agrégation doivent figurer dans la clause GROUP BY.  


(c'est un peu chiant, c'est bourré de fautes de frappes mais bon [:spamafote]

n°1606516
MEI
|DarthPingoo(tm)|
Posté le 30-08-2007 à 19:48:27  profilanswer
 

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 :D


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1606520
MagicBuzz
Posté le 30-08-2007 à 19:55:48  profilanswer
 

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.

mood
Publicité
Posté le 30-08-2007 à 19:55:48  profilanswer
 

n°1606601
polo7
Posté le 31-08-2007 à 00:19:04  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  PHP - GROUP BY et ORDER BY

 

Sujets relatifs
[résolu] PHP : lire une page web et séparation paramètresLe code PHP ne s'affiche plus (tags PHP reconnus comme tags HTML)
recherche un pro en PHP[MySQL] REGEXP dans un ORDER BY
[SQL] Probleme avec ORDER BY[PHP] Récupérer session Curl
[PHP] Fonction include plus rapide qu'un bout de code dans la page ?Formulaire GET dans fichier PHP
[ Conseil] Coder un site en PHP[PHP] Lire un répertoire UTF-8
Plus de sujets relatifs à : PHP - GROUP BY et ORDER BY


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR