IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Trier résultats selon un critère


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Trier résultats selon un critère
    Bonjour,

    Voilà mon problème :

    J'ai une table "concerts" avec les attributs suivant :
    année, date de début, date de fin, salle, lieu, etc.

    et je voudrais afficher la liste par année croissante du style:
    => 2006
    - concert 1
    - concert 2

    =>2007
    - concert 1
    - concert 2

    J'ai donc fait un order by sur l'année mais bien évidemment, il me retourne :
    => 2006
    - concert 1

    => 2006
    - concert 2

    => 2007
    - concert 3

    etc.

    Pour régler ça, dans la boucle qui traite les résulats de la première requête (SELECT * FROM concerts ORDER BY annee), j'ai inséré une 2ème requete qui teste l'année avant d'afficher la liste des concerts.

    en clair, ça donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $listeconcerts = mysql_query("SELECT * FROM concerts WHERE id='$id' ORDER BY annee ASC");
     
    echo "<table width='390' border='0' cellpadding='0' cellspacing='0'>
    <tr>
    ";
    while ($res = mysql_fetch_array($listeconcerts))
    {
    	$annee = $res["annee"];
    	echo" 	<td colspan='3'><span  class='soustitre'>$annee</span><br /><br /></td>
    	</tr>";
     
    	$liste2 = mysql_query("SELECT * FROM concerts WHERE id='$id' AND annee='$annee' ORDER BY date_deb ASC");
    	while ($result = mysql_fetch_array($liste2))
    	{ ...
    Ca marche mais il me semble que c'est pas très propre. si quelqu'un a une solution plus rapide...

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    y a une erreur dans la requête précédente, faut faire un GROUP BY année sur la première requête, non un ORDER BY.
    mais bon, je suis toujours preneuse s'il y a une méthode plus simple

  3. #3
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Salut,

    Il y a une méthode qui ne nécessite pas de faire plusieurs requêtes.

    Tout d'abord, tu refais la requête que tu avais réalisée avant : reprendre tous les concerts + l'année, et ordonner le tout par l'année.

    Dans ton code PHP, tu ajoutes une variable "$derniere_annee", où tu stockeras l'année du dernier concert traité. A chaque itération de ta boucle mysql_fetch_array(), tu vérifies si $res["annee"] est différent de $derniere_annee. Si c'est le cas, tu affiches l'année et tu mets à jour $derniere_annee.

    Il faut initialiser $derniere_annee à une valeur impossible style -1 ou chaîne vide.

  4. #4
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    En SQL tu peux faire ça,
    maintenant c'est toi qui juges si c'est plus propre ;-))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 	CASE WHEN lieu IS NULL THEN annee ELSE lieu END
    FROM
    (
    SELECT	YEAR(annee) AS annee,
    	lieu AS lieu
    FROM 	Concert
    UNION 
    SELECT	YEAR(annee) AS annee,
    	NULL AS lieu
    FROM 	Concert
    GROUP BY 1,2
    ORDER BY 1,2
    ) AS tmp;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Merci LeadingEdge mais j'ai repris l'idée de Biglo, pour éviter d'avoir plusieurs SELECT parce que ça m'embrouille vite la tête, pour un truc aussi simple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Trier le contenu d'un fichier selon plusieurs critères
    Par ahu206 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 06/09/2010, 14h38
  2. Réponses: 5
    Dernier message: 15/10/2008, 09h08
  3. trier une arraylist selon un critère
    Par marion5515 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 15/03/2008, 20h25
  4. Réponses: 5
    Dernier message: 11/03/2008, 11h41
  5. [TRIE] Trier un résultat selon certains termes
    Par narmataru dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/07/2005, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo