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 :

ORDER BY avec conditions


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de carelha
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 168
    Points : 109
    Points
    109
    Par défaut ORDER BY avec conditions
    bonjour,
    dans ma base de données, 2 cellules peuvent ou non comporter 1 date, une troisième peut ou non comporter "oui". Si elle comporte oui, il n'y a pas de date dans les deux autres cellules de la ligne.

    Je souhaiterais organiser les résultats d'une requête pour qu'apparaissent en premier les lignes où il y a une date dans une des deux cellules (par odre croissant), puis celles où il y a "oui", mais je ne sais pas comment faire, ORDER BY ne suffit pas.

    exemple
    1. 24-10-2007 - NULL - NULL
    2. NULL - 30-10-2007- NULL
    3. NULL - NULL - OUI
    4. 10-10-2007 - NULL - NULL
    5. NULL - NULL - OUI


    Dans cet exemple, je voudrais que les résultats soient affichés dans l'ordre : 4 - 1 -2 - 3 - 5
    (d'abord les dates par ordre croissant puis les lignes où il y a juste "oui" dans la dernière cellule)


    Toute ma requête est OK, c'est juste l'affichage qui me pose problème.

    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 367
    Points : 15 718
    Points
    15 718
    Par défaut
    tu peux faire un tri sur plusieurs champs comme ça par exemple
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY champOui ASC, date1 ASC, date2 ASC

    par contre le tri de dates est un peu spécial, tu as surement un problème de conception de ta table
    est ce que les champs date peuvent avoir une date tous les deux ?

  3. #3
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par mathieu Voir le message
    tu peux faire un tri sur plusieurs champs comme ça par exemple
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY champOui ASC, date1 ASC, date2 ASC
    Comment sont évalués les champs, dans ce genre d'order by ? Comment se déroule exactement l'ordonnancement des données ? Merci.

  4. #4
    Membre régulier Avatar de carelha
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 168
    Points : 109
    Points
    109
    Par défaut
    Merci mathieu de ta réponse,
    oui, mes champs dates peuvent être remplis tous les deux, et je n'ai vraiment pas le courage de refaire toute ma base de données et toutes les pages...Je m'y prendrai dfférement la prochaine fois

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 367
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 367
    Points : 15 718
    Points
    15 718
    Par défaut
    Citation Envoyé par carelha Voir le message
    mes champs dates peuvent être remplis tous les deux
    ça se complique un peu plus alors
    la question a se poser c'est : quand les 2 champs sont remplis, le tri doit se faire par rapport au 1er champ ou bien par rapport au 2e ?

    déjà tu as besoin de "IFNULL" : http://dev.mysql.com/doc/refman/5.0/...unction_ifnull

    et tu auras quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT champOui, IFNULL(date1, date2) as champDates
    FROM ...
    ORDER BY champOui ASC, champDates ASC
    ensuite je te laisse tester s'il faut mettre "ASC" ou "DESC" et peut-être que tu devras inverser "date1" et "date2" si le tri se fait sur le 2e champs quand les 2 sont remplis

  6. #6
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 065
    Points
    6 065
    Par défaut
    J'ai pas tout lu (fatigué et j'ai les crocs ce soir )

    Sachez qu'il est possible de placer des numéros de champs dans le order by.

    SELECT isFaim FROM monEstomac ORDER BY 1
    il va faire l'ordre sur la premiere colonne déclaré dans le select si c'est étoile alors c'est celle déclaré dans l'ordre présent dans la structure de la table.

    Bon j'ai les crocs je vais me taper un coyotte au fines herbes

  7. #7
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par AL1986 Voir le message
    Comment sont évalués les champs, dans ce genre d'order by ? Comment se déroule exactement l'ordonnancement des données ? Merci.
    Personne ne daigne m'expliquer ?

  8. #8
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 065
    Points
    6 065
    Par défaut
    ça depend du Charset . Par exemple :
    BBBB
    aa

    Le b majuscule peut passer en premier alors que a c'est la premiere lettre de l'alphabet dans un charset spécifique. Dans un autre Charset le "a" va passer en premier.
    donc regarde ton charset.
    Je t'invite à regarder cette article
    http://antoun.developpez.com/mysql5/jeux-collations/

  9. #9
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Merci pour ta réponse qui est très instructive même si elle ne correspond pas à ma demande.
    Ce que je voulais savoir c'est comment sont évalués les champs quand il y en a plusieurs dans un order by ? Comment est interprété un
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    order by ch1, ch2, ch3
    ?

  10. #10
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 494
    Points : 6 065
    Points
    6 065
    Par défaut
    il fait le trie par ordre indiqué dans le order by. Donc ton cas. ch1 puis ch2 et ainsi de suite. L'ordre déclaré dans le order by a une incidence sur le tri

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

Discussions similaires

  1. ORDER BY avec une condition
    Par _Melisse_ dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/12/2007, 18h00
  2. Sélection multi table avec condition
    Par iuz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/05/2004, 15h04
  3. ALTER VIEW avec condition
    Par yan77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/04/2004, 17h22
  4. Index avec conditions
    Par marhnix dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/03/2004, 10h48
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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