Se connecter avec
S'enregistrer | Connectez-vous
Votre question

Problème requête, conflit GROUP BY et ORDER BY ??

Dernière réponse : dans Programmation
Partagez
19 Septembre 2009 12:43:38

Bonjour à tous. J'ai un petit soucis, mais ça m'énerve.
J'ai 4 tables qui me permettent d'afficher des stats pour des joueurs de foot : TFstats, TFpays, TFcompetitions et TFstats_postes. Je récupère le nombre de matchs, de buts, le championnat, le pays, le poste, la saison ...

Voici ma requête :
Spoiler
SELECT TFstats.saison, TFstats.club, TFstats.nm_club, TFcompetitions.titre, TFpays.drapeau, TFpays.pays, TFpays.id, TFstats.Europe, TFstats.Selection, TFstats.MJtit, TFstats.BUTS, TFstats.id_poste, TFstats.pret, TFstats.IdChampPhpL, TFstats.StatDateDepart, TFstats.StatDateArrivee
FROM TFstats, TFpays, TFcompetitions, TFstats_postes
WHERE
(TFstats.id_poste=TFstats_postes.id
AND TFcompetitions.id_pays=TFpays.id
AND TFcompetitions.catid=TFstats.id_champ2
AND TFstats.id='$id_joueur'
AND TFstats_postes.LPF_famille='1')
OR
(TFstats.id_poste=TFstats_postes.id
AND TFcompetitions.id_pays=TFpays.id
AND TFcompetitions.catid=TFstats.id_champ2
AND TFstats.id='$id_joueur'
AND TFstats_postes.LPF_famille='11')
GROUP BY TFstats.StatDateDepart, TFstats.StatDateArrivee, TFstats.club, TFcompetitions.id_pays
ORDER BY TFstats.StatDateDepart DESC, TFstats.StatDateArrivee DESC, TFstats.saison DESC, TFcompetitions.Niveau DESC

Elle fonctionne bien, mon petit soucis est juste au niveau du tri. Le "TFcompetitions.Niveau DESC" n'est pas pris en compte. A la place, il tri par TFstats.id2 (par date de remplissage pour faire plus simple).
Merci de votre aide ...

Autres pages sur : probleme requete conflit group order

19 Septembre 2009 20:59:22

Déjà tu pourrai simplifier ta requette en utilisant le OR plus intelligement.

Ensuite, je ne comprend pas pourquoi le SGBD ne te crie pas dessus :
Lorsque tu fait un GROUP BY XXXX.A
tu ne peux pas trier par XXXX.B, puisqu'il peut y avoir plusieurs valeurs de B correspondant à une valeur de A....
m
0
l
19 Septembre 2009 22:20:26

Mouais, je crois que mon group by était pas forcément bien vu. Je pense que ma solution consisterait plus à inclure une sous requête...
Du coup je supprime mon group by.
Pour l'optimisation, c'est bien ça que tu voulais dire :
  1. SELECT TFstats.saison, TFstats.club, TFstats.nm_club, TFcompetitions.titre, TFpays.drapeau, TFpays.pays, TFpays.id, TFstats.Europe, TFstats.Selection, TFstats.MJtit, TFstats.BUTS, TFstats.id_poste, TFstats.pret, TFstats.IdChampPhpL, TFstats.StatDateDepart, TFstats.StatDateArrivee
  2. FROM TFstats, TFpays, TFcompetitions, TFstats_postes
  3. WHERE
  4. TFstats.id_poste=TFstats_postes.id
  5. AND TFcompetitions.id_pays=TFpays.id
  6. AND TFcompetitions.catid=TFstats.id_champ2
  7. AND TFstats.id='$id_joueur'
  8. AND (TFstats_postes.LPF_famille='1' OR TFstats_postes.LPF_famille='11')
  9. ORDER BY TFstats.StatDateDepart DESC, TFstats.StatDateArrivee DESC, TFstats.saison DESC, TFcompetitions.Niveau
m
0
l
20 Septembre 2009 08:32:37

Ouaip

Et utilise [code] au lieu de
m
0
l