JeuWeb - Crée ton jeu par navigateur
Jointure ordonnée - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Jointure ordonnée (/showthread.php?tid=6200)

Pages : 1 2 3


Jointure ordonnée - Wells - 29-01-2013

Bonjour à tous, je me pose une question, je doute que ca soit faisable simplement mais bon sait on jamais ^^

J'ai une table avec trois colones:

Code :
Joueur - Type - Valeur

Contenant :
Code :
1 - ABA - 5
2 - ABA - 10
1 - ABG - 20

Je fait une requete du style:

Code :
SELECT * FROM table GROUP BY Joueur

Cependant, j'aimerais que ma requete jointe en priorité sur les lignes ABG.

Comment faire ?


RE: Jointure ordonnée - Sephi-Chan - 29-01-2013

Qu'est-ce que ça donne si tu ajoutes un ORDER BY valeur ?

PS : tu ne fais aucune jointure.


RE: Jointure ordonnée - Myrina - 29-01-2013

Déjà, tu ne peux pas faire un SELECT comme cela.
Les colonnes doivent être dans le GROUP BY ou des fonctions (d’agrégation normalement)
Ensuite, le GROUP BY n'empêche pas le ORDER BY Type DESC


RE: Jointure ordonnée - Xenos - 29-01-2013

La présence d'un GROUP BY n'oblige pas à lister explicitement les noms de colonne, non? Le * remplace tous les noms, dont la colonne du GROUP BY.
Je comprend pas le "en priorité sur les lignes ABG"...
Si on groupe par joueur, on groupe par joueur, point, peu importe les valeurs de la colonne "type".

En revanche, si tu veux grouper par type puis par joueur, GROUP BY `Type`, `Joueur` devrait marcher (je suis pas sûr pour autant: à tester).


RE: Jointure ordonnée - Sephi-Chan - 29-01-2013

Pour faire des tests : http://sqlfiddle.com/#!2/1f17e/9


RE: Jointure ordonnée - Wells - 29-01-2013

Ouais bon, je me rend compte qu'en voulant simplifié ca veut plus rien dire. Je reprend donc pour etre plus clair.

J'ai DEUX tables:

joueur et maison

dans maison se trouve mes ABA/ABG au format:

Code :
Joueur - Type - Valeur
1 - ABA - 5
2 - ABA - 10
1 - ABG - 20

Je fait donc un :
Code :
SELECT Joueur,Type
FROM Joueur
LEFT JOIN maison ON Joueur.Joueur=Maison.Joueur
GROUP BY Joueur

Ce qui me retourne:

Code :
1 ABA
2 ABA

Hors moi je veux que le ABG soit prioritaire:

Code :
1 ABG
2 ABA

Voila, je pense que c'est plus clair la Smile

Edit: le ORDER BY ne change rien à l'affaire, je ne vous aurais pas déranger pour si peu sinon Wink


RE: Jointure ordonnée - Myrina - 29-01-2013

Effectivement, on comprend mieux.
Donc, comme je l'ai déjà dit, il faut que ta colonne Type soit une fonction du style MAX(Type) sauf que je ne pense pas que cela fonctionnera avec des chaines de caractères


RE: Jointure ordonnée - archANJS - 29-01-2013

À quoi font référence ABA et ABG? Ne peuvent-ils pas être remplacés par 1 et 2?


RE: Jointure ordonnée - Xenos - 29-01-2013

ou avec GROUP_CONCAT(Type) en place de Type dans le SELECT? Cela rassemblerait les typages (ABA, ABG) et donc, tu pourras en faire ce qu'il te plait.

Car, logiquement, si tu "group by" une colonne, c'est que le résultat des autres colonnes: soit il t'importe peu, soit il est le même pour chaque ligne. Or, ici, ce n'est pas le cas.

Sinon, un group by Joueur, Type peut faire l'affaire.
Pourquoi souhaites-tu que ABG soit "prioritaire"? Il y a peut-être d'autres méthodes alternatives à la suite que tu comptes créer, et qui faciliteront cette étape de requête SQL.

Dernièrement, comme le souligne archANJS, si c'est possible de changer les ABG/ABA en une énumération et de traiter ducoup des nombres, cela te permettra d'ordonner les typages comme bon te semble, le typage associé à la valeur 0 étant le plus prioritaire (ou le moins, si on utilise MAX et pas MIN).


RE: Jointure ordonnée - srm - 30-01-2013

Pour ceux qui veulent s'amuser : http://sqlfiddle.com/#!2/4b07f/3
L'exercice est posé Wink
Je pars au boulot, je vous donne "la réponse" plus tard