begin process at 2012 05 26 18:24:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

MySQL

 > 

Requêtes

 > 

Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)

jeudi 12 mai 2011 à 14:33:19 | Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)

unvolutus

Bonjour bonjour, :)

Je vous explique vite fait mon problème

J'ai une table mysql livres avec les données suivantes :
livre 1 en
livre 1 fr
livre 2 it
livre 1 it
livre 3 fr

J'essaye de faire une requete qui me renvoie les livres 1, 2 et 3 avec une langue de "préférence"(fr).
Si la langue de préférence n'existe pas, l'anglais doit etre choisis, sinon s'il n'existe pas non plus ça récupère le livre en italien, et ainsi de suite.
Toutes les livres n'existent pas forcément dans toutes les langues.
Dans mon exemple je voudrais récupérer cela : (ma langue de préférence est francais, puis anglais, puis italien)
livre 1 fr
livre 2 it
livre 3 fr

J'ai essayé avec ORDER BY FIELD(langue, "fr", "en", "it") mais ça me renvoie
livre 1 fr
livre 1 en
livre 1 it
livre 2 it
livre 3 fr

Le problème est que le livre 1 est renvoyé 3 fois. Et le problème ne se règle pas avec un GROUP BY car il est exécuté avant le tri.

S'il vous plait!!! A l'aiddddeeee

Val
jeudi 12 mai 2011 à 14:53:51 | Re : Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)

smathis

Et si tu select des valeurs distinctes de nom de livre ? Mais j'imagine que le distinct est fait avant le tri, donc il prend le premier résultat. Et si c'est pas le même que la préférence.. Mais !
Tu prends la requête qui fourni ça : livre 1 fr
livre 1 en
livre 1 it
livre 2 it
livre 3 fr
Et tu fais ça :
SELECT distinct(nom_livre), langue
FROM (Select... ORDER BY FIELD(langue, "fr", "en", "it")) as t1(id,nom,livre, langue)
vendredi 13 mai 2011 à 08:55:38 | Re : Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)

unvolutus

Salut,
Non, ca renvoi
livre 1 fr
livre 1 en
livre 1 it
livre 2 it
livre 3 fr

:/

Du coup à la place du distinct, je met un group by à la fin sur nom_livre et je trouve les bons résultat.
Mais la doc mysql dit "N'utilisez pas cette fonctionnalité si les colonnes que vous omettez dans la clause GROUP BY ne sont pas unique dans le groupe!! Vous auriez des résultats inattendus! "
Mais apres des tests, j'ai toujours les bon résultat.
Donc je crois que je vais utiliser ca et verifier de temps en temps si les résultats sont toujours bon

En tout cas je suis toujours ouverte à toutes propositions :p
vendredi 13 mai 2011 à 09:23:35 | Re : Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)

smathis

Comment est découpée ta table ?
Une colonne avec "Livre 1 fr", etc, ou c’est découpé en plusieurs colonnes avec d'un coté le nom "Livre 1" et une autre avec la langue ?
Le group by fait plus ou moins la même chose que distinct, en effet du coup il faut une seul valeur pour le group, mais j'imagine que sinon il prend la première valeur possible et ignore les autres, donc ça marche.
vendredi 13 mai 2011 à 09:43:53 | Re : Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)

unvolutus

Voila la forme de mes tables

tab:livre
id_livre | livre
-----------------
1 | popo
2 | lmlm
3 | bnbn

tab:langue_livre
id_langue | id_livre | langue
-----------------------------
1 | 1 | en
2 | 1 | fr
3 | 2 | en
4 | 1 | it
5 | 3 | fr

Concernant le group by, c'est justement dit que on ne peux pas savoir vraiment ce qu'il vas renvoyer.
Dans mes tests ca me renvoi toujours le premier mais ils disent que rien n'est garanti... ce qui n'est super top ;)
vendredi 13 mai 2011 à 10:51:22 | Re : Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)

smathis

Oui mais il doit bien exécuter le même procédé pour avoir le résultat, t'auras toujours le 1er même si t'essayes 10 000 fois.
Sinon tu fais le boulot avec ton appli et tu supprimes les doublons dans ta liste de résultat.
vendredi 13 mai 2011 à 11:11:29 | Re : Faire un GROUP BY dans un ORDER BY FIELD ou autres solutions si vous etes super fort !!! :)

unvolutus

Oui, c'etait la dernière des solutions mais ca me fait gagner pas mal d'échange entre mysql et php en filtrant avant.
Surtout qu'il y a pas mal de livre et le nombre de langue vas certainement augmenter. Donc je divise facilement la taille de l’échange par 4 aujour'hui et plus par la suite...

En tout cas merci de m'avoir mi sur la piste ;)


Cette discussion est classée dans : langue, livre, by, it, fr


Répondre à ce message

Sujets en rapport avec ce message

GROUP BY ET tri [ par fcdconnect ] Bonjour,j'aimerai savoir comment trier les resultat groupé dans une requete mysql de ce type : champ de la table :id | num | datetime |etc1 | 0552| 2 fonctionnalités ODBC oracle [ par trabice ] Bonjoursuite à la volonté d'un client de passer d'une passe MYSQL à une base ORACLE.Je m'interroge quant aux fonctions assurées par l'ODBC,notamment p Order by sur un count [ par dorian53 ] Bonjour,Je souhaite executer un classement sur une table de vote.SELECT voteVM, COUNT(numVM)FROM voteGROUP BY voteVMORDER BY 2 DESC, 1 ASC(a savoir Etrange réaction pour un order by... [ par jef_b ] Bonjour ! J'ai un petit problème avec une clause ORDER BY... Ma requête fonctionnait très bien et puis voilà que depuis le début de l'année, plus rie Mélange Sql ORDER BY et LIMIT [ par nemingway ] Bonjour, je trie une table selon deux paramètres (auteur, puis id). Est-il possible d'appliquer un LIMIT à chacun de ces tris, cad SELECT ... FROM .. Un group by me resiste [ par ManuAntibes ] Salut à tousJe veux mettre un groupe By dans mon jeu d'enregitrement , il n'en veut pas !!!!voici mon jeu d'enregistrementDim Re_liste_prenom__MMColPa du MCD au Relation Access ou Mysql... [ par jiojioforever ] Salut ! je suis en stage et je dois gérer une petite bibliotheque (VB+Access) j'ai donc élaboré un MCD et MLD CATEGORIE(num_cat, nom_cat) EDITEUR(num_ Choix d'un livre [ par PascalGo ] Bonjour,je débute en SQL et je recherche un livre qui puisse me permettre de faire des requetes en SQL dans Access,Genre Requete paramêtréeRequete cré Ordonner selon une valeur [ par Isengard ] Bonjour ! J'ai un petit problème assez énervant ! Je fais un système de réféncement d'évenement avec génération d'une frise chronologique qui fait ap pb : ORDER BY [ par trexor ] Bonjour, J'ai utilisé une requète pour ma table liée et ca marche plutôt bien.Mais j'ai un petit problème avec ma requète ci dessous : cnxClasse.affic


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales