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 :

Tri alphabétique sur plusieurs champs


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut Tri alphabétique sur plusieurs champs
    Bonjour à tous !

    je me pose une petite question : est-il possible d'effectuer un tri alphabétique sur plusieurs champs en mélangeant les champs ?

    j'explique parce que c'est pas trés clair tout ça !

    j'ai deux colonnes 'nomUsage' et nomFamille' un des deux peut-être vide donc pour afficher une jolie liste de tous les noms et qu'aucun soit vide je mélange les deux. Quand un type de nom est vide j'affiche l'autre. Le problème est que j'aimerai que cette liste soit triée alphabétiquement. J'ai donc ajouté a ma requete un order by nomUsage,nomFamille mais le probleme est qu'il m'affiche d'abord tous les nomFamille bien ordoné puis tous les nomUsage bien trié.
    Alors que moi je veut une liste bien triée des deux mélangés.

    Bon si quelqu'un a compris ce que j'ai essayait d'écrire qu'il ne prenne pas le volant ce soir !

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: Tri alphabétique sur plusieurs champs
    Oui, c'est possible. Attention, attachez vos ceintures:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ORDER BY 
     IF(nomFamille IS NULL, nomUsage, 
        IF(nomUsage IS NULL, NULL,
           IF(nomFamille<nomUsage,  nomFamille, nomUsage)
        )
     )
    Si l'un des 2 est NULL, ça prendra l'autre pour le tri, sinon, ça prendra nomFamille ou nomUsage (le premier dans l'ordre alphabétique)


    Maintenant, si tu veux que tes personnes soient représentées plusieurs fois (une fois pour leur nomFamille et une fois pour leur nomUsage, si non NULL) le tout trié par ordre alphabétique, tu peux essayer ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (SELECT personne.*, nomFamille AS nom
    FROM personne
    WHERE nomFamille IS NOT NULL)
     
    UNION
     
    (SELECT personne.*, nomUsage AS nom
    FROM personne
    WHERE nomUsage IS NOT NULL)
     
    ORDER BY nom
    Remarque: si nomFamille et nomUsage sont tous deux NULL, alors ils n'apparaitront pas (il faudrait faire une nouvelle UNION)

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Ou plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY CONCAT (NomFamille, NomUsage)

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Médiat
    Ou plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY CONCAT (NomFamille, NomUsage)
    Non ça, ça ne marche que si l'un ou l'autre des noms est nul. Mais si on a une Mademoiselle "Durand" qui marie un Monsieur "Dupond" et qui, après une séparation (sans que le divorce n'ait été prononcé), décide d'être connue sous son nom de jeune fille, le CONCAT (NomFamille, NomUsage) retournera "DupondDurand". Or c'est pas ce qu'on veux !

    Dans la deuxième solution (avec l'UNION), on aura 2 enregistrements: un sous le nom de "Dupond" et l'autre sous le nom de "Durand", et désignant la même personne.

  5. #5
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par pcaboche
    Citation Envoyé par Médiat
    Ou plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY CONCAT (NomFamille, NomUsage)
    Non ça, ça ne marche que si l'un ou l'autre des noms est nul.
    Pas si sur que ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mysql> select concat('nom',null);
    +--------------------+
    | concat('nom',null) |
    +--------------------+
    | NULL               |
    +--------------------+
    1 row in set (0.00 sec)
    Une concaténation avec null renvoit null.

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Adjanakis
    Une concaténation avec null renvoit null.
    Bon et bien c'est encore pire que ce je croyais... la solution de Médiat ne marche carrément pas du tout !

    J'en revient donc aux 2 solutions que j'ai proposées au début (qui devraient produire un résultat différent, selon le besoin).

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    ORACLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Concat('Nom', NULL) FROM dual
     
    +--------------------+ 
    | CONCAT('Nom', NULL)| 
    +--------------------+ 
    | Nom                | 
    +--------------------+
    Lequel de mySQL ou d'ORACLE est conforme à la norme ? Personnellement, je ne sais pas, mais en tout cas je crois qu'il ne faut pas se faire trop d'illusion sur la portabilité .

  8. #8
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Médiat
    en tout cas je crois qu'il ne faut pas se faire trop d'illusion sur la portabilité.
    Indubitablement !

  9. #9
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    J'ai préféré précisé car sur ce forum(MySQL), il est préférable d'adopter des syntaxe et résultat MySQL afin de ne pas avoir par la suite des questions du style "J'ai lu sur ce forum que ça marchait et ça ne marche pas chez moi".

Discussions similaires

  1. tri tableau sur plusieurs champs
    Par manue75 dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2010, 13h08
  2. Réponses: 2
    Dernier message: 15/05/2007, 16h56
  3. [SQL SERVER ] Tri sur plusieurs champs
    Par fantomchris dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/07/2006, 17h59
  4. Comment faire un Tri sur plusieurs champs
    Par guile153 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/07/2006, 12h52
  5. [Collection] Tris sur plusieurs champs
    Par partyboy dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 12/07/2005, 16h56

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