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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MySQL : grouper les entrées puis les trier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MySQL : grouper les entrées puis les trier

n°2065116
vanquishV1​2
se coucher tard nuit
Posté le 21-03-2011 à 16:40:52  profilanswer
 

Bonjour,
 
J'ai une table de ce type
http://img40.imageshack.us/img40/8640/tablea.gif
Et je voudrais obtenir une liste des meilleurs prix pour chaque modèle et classés par modèle, soit avoir le résultat suivant :
 
Audi A3 5600
Peugeot 308 2265
Renault Clio 1346
Renault Fluence 4635
Renault Kangoo 2569
Renault Twingo 1280
 
Et bha j'y arrive aps  :??:  
J'ai fait un SELECT DISTINCT avec un GROUP BY mais le GROUP BY me renvoie les valeurs qu'il veut.
J'ai fait avec une table temporaire mais ça marche pas.
 
Que faut il faire ? Une sous requête ?
 
Faut savoir aussi que la table contient 15 000 entrées (et que le résultat est mis en cache).
 
Merci à vous !


---------------
Bha ouais mais bon, m'enfin quoi...
mood
Publicité
Posté le 21-03-2011 à 16:40:52  profilanswer
 

n°2065130
rufo
Pas me confondre avec Lycos!
Posté le 21-03-2011 à 17:51:55  profilanswer
 

SELECT Marque, Modele, Min(Prix) FROM MaTable GROUP BY Marque, Modele
 
Ca le fait pas?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2065131
vanquishV1​2
se coucher tard nuit
Posté le 21-03-2011 à 18:02:11  profilanswer
 

[:shimay:1] Il semblerait que si
 
Truc de fou que ce soit si simple, j'étais parti sur un truc idem hier mais je ne savais pas qu'on pouvait faire GROUP BY machin, truc !
 
Je teste et je te dis ça, merci !
 
Quand je pense que j'étais parti sur une table temporaire et des requetes de partout [:dovakor loves you:4]


---------------
Bha ouais mais bon, m'enfin quoi...
n°2065135
vanquishV1​2
se coucher tard nuit
Posté le 21-03-2011 à 18:08:16  profilanswer
 

NAN ça marche pas, je me disais bien que j'avais testé, ça me renvoie n'importe quel prix :(


---------------
Bha ouais mais bon, m'enfin quoi...
n°2065139
flo850
moi je
Posté le 21-03-2011 à 18:33:07  profilanswer
 

non ça doit renvoyer me prix  le plus bas pour chaque vehicule


Message édité par flo850 le 21-03-2011 à 18:33:19

---------------

n°2065141
vanquishV1​2
se coucher tard nuit
Posté le 21-03-2011 à 18:35:28  profilanswer
 

Et bien non et c'est d'ailleurs un souci expliqué ici :( http://cedric-duprez.developpez.co [...] -group-by/


---------------
Bha ouais mais bon, m'enfin quoi...
n°2065145
flo850
moi je
Posté le 21-03-2011 à 18:42:42  profilanswer
 

non  
le lien que tu donnes explique ce qui se passe quand certaines colonnes ne sont ni dans e group by , ni dans une fonction d'aggregat, comme mn/max/avg. En fait, c'est ce que tu faisait au debut  
 
dans ton cas actuel  
SELECT Marque, Modele, Min(Prix) FROM MaTable GROUP BY Marque, Modele
prix, qui n'est pas dans le group by est dans uen fonctione d'agreggat


---------------

n°2065148
vanquishV1​2
se coucher tard nuit
Posté le 21-03-2011 à 18:46:43  profilanswer
 

Ok je vais réessayer alors. Merci beaucoup en tout cas.
Par contre comment je peux limiter la plage de prix maintenant ? Genre entre 3000 et 5000 uniquement ?


---------------
Bha ouais mais bon, m'enfin quoi...
n°2065149
flo850
moi je
Posté le 21-03-2011 à 18:52:09  profilanswer
 

having min(prix) >3000 and ...
 


---------------

n°2065152
vanquishV1​2
se coucher tard nuit
Posté le 21-03-2011 à 19:10:36  profilanswer
 

Franchement, merci à vous deux c'est hyper gentil vous êtes des boss.
 
Je connaissais même pas HAVING et je comprends même pas la différence avec order by mais ça marche !


---------------
Bha ouais mais bon, m'enfin quoi...
mood
Publicité
Posté le 21-03-2011 à 19:10:36  profilanswer
 

n°2065153
flo850
moi je
Posté le 21-03-2011 à 19:12:45  profilanswer
 

dans l'ordre :
les filtres du where s'applique
calcul des aggregats (group by )
les filtres du having s'appliquent ( ils peuvent donc s'appliquer sur les agregats)
tri des resultats( order by )
limitation du nombre de resultat ( limit )


---------------

n°2065166
vanquishV1​2
se coucher tard nuit
Posté le 21-03-2011 à 20:22:26  profilanswer
 

Merci ton message va droit dans mes favoris ;)


---------------
Bha ouais mais bon, m'enfin quoi...
n°2065247
rufo
Pas me confondre avec Lycos!
Posté le 22-03-2011 à 10:26:42  profilanswer
 

Le having, c'est en quelque sorte l'équivalent du Where sur le contenu remonté par le SELECT, après application du WHERE. Le WHERE fait un premier filtrage, le having un second, effetcivement souvent sur les agrégats, le WHERE ne pouvant le faire (ou alors via une sous-requête).
 
Pour la suite, tu devrais apprendre le SQL et d'une manière générale, les outils que tu manipules, ça te fera gagner du temps. Faire du sql sans connaître les clauses de base, c'est un peu dommage. Tu vas voir aussi que chaque SGBD a ses propres fonctions qui peuvent faire des trucs plus ou moins complexes, plus ou moins utiles/pratiques... ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2065249
flo850
moi je
Posté le 22-03-2011 à 10:31:22  profilanswer
 

le having est un where appliqué après le group by
sans clause group by, un having est exactement equivalent à un where


Message édité par flo850 le 22-03-2011 à 10:32:31

---------------

n°2065257
vanquishV1​2
se coucher tard nuit
Posté le 22-03-2011 à 11:01:33  profilanswer
 

rufo a écrit :

Pour la suite, tu devrais apprendre le SQL et d'une manière générale, les outils que tu manipules, ça te fera gagner du temps. Faire du sql sans connaître les clauses de base, c'est un peu dommage. Tu vas voir aussi que chaque SGBD a ses propres fonctions qui peuvent faire des trucs plus ou moins complexes, plus ou moins utiles/pratiques... ;)

Oui je devrais mais bon ça ne m'éclate pas, je n'ai pas du tout le temps et pour moi ce n'est qu'un outil que j'utilise pour arriver à mes fins. Dès que j'en ai les moyens j'embauche un expert PHP/SQL pour mes développement; Mon métier à moi c'est de développer le SEO et le chiffre d'affaire.
Et avec mes maigres connaissances apprises sur le tas j'arrive à faire des choses pas trop mal.
 
Merci beaucoup pour toutes ces bonnes explications.


---------------
Bha ouais mais bon, m'enfin quoi...
n°2065261
rufo
Pas me confondre avec Lycos!
Posté le 22-03-2011 à 11:20:16  profilanswer
 

Perd pas de vue qu'une BD mal modélisée, mal tunée (index, variables de conf...) et des requêtes mal écrites peuvent te ruiner l'exploitation d'un outil car il ne tiendra pas la charge (et donc les gens vont partir). Et dans ce cas (quand ça rame), quand on n'y connait pas grand chose, on est tenté de dire : y'a qu'à acheter un serveur plus puissant... :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2065276
vanquishV1​2
se coucher tard nuit
Posté le 22-03-2011 à 11:59:34  profilanswer
 

Ecoute pour l'instant mon ptit Kimsufi 250G tiens sans problème les 10/12000 VU jour et a encaissé les pics à 20 000 sans broncher.
 
Faut dire que je met en cache les résultats tous les soirs à 1h du matin : pendant 24h les pages délivrées ne passent que par apache qui envoit une version statique HTML pure.
 
Après, si un jour ça monte vraiment, je te dis je prends un expert pour qu'il repasse toutes les requêtes, les tables et la conf SQL en revue. Mon on en est pas là ;)


---------------
Bha ouais mais bon, m'enfin quoi...

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

  MySQL : grouper les entrées puis les trier

 

Sujets relatifs
Complexité: trier puis chercher ou chercher directement ?Menu Dynamique recursif php/mysql
Galère requete MySQLMySQL + PHP Tourne pas rond
Afficher données mysql dans un tableau[MySQL] LOAD DATA IN FILE problème
Mysql - Triggers - Limitation - Workaround?[resolu]Comparer deux entrées dans 1 table .... face à face
Tableau à double entrées et séparation des couchesProblème à l'importation B.D.D MySQL
Plus de sujets relatifs à : MySQL : grouper les entrées puis les trier


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