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

Langage SQL Discussion :

[MySQL] résultat respectant l'ordre de la clause WHERE OR ?


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [MySQL] résultat respectant l'ordre de la clause WHERE OR ?
    Bonjour,

    Ce doit être enfantin pour plein de monde, mais désolé je sais pas quoi faire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT name
    FROM team
    WHERE id =186
    OR id =174
    j'obtiens :
    Manchester united
    Preston
    Alors que l'id de Manchester United est 174 et celui de Preston 186.

    Comment faire pour avoir un résultat respectant l'ordre de la clause ...OR... ?

    Merci infiniment

    Mise en forme modifiée par Magnus, merci de penser aux balises CODE notamment

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    La clause déterminant le tri des données d'une requête est ORDER BY et elle n'existe pas dans votre requête.

    Pour l'exemple que vous fournissez, il vous suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
    ORDER BY id DESC;
    mais si vous construisez votre clause WHERE est dynamiquement alors la clause ORDER BY peut être plus complexe à écrire...
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci Magnus,

    En effet, la condition est dynamique et mon but n'est pas de classer par ordre croissant ou decroissant de l'id mais vraiment de respecter l'ordre dans la condition.

    Est ce possible ou dois-je faire 2 requêtes l'une après l'autre?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Sans clause ORDER BY, l'ordre des lignes retournées par une requête SQL n'est pas prévisible.
    Dans ton cas, si tu veux forcer l'ordre des lignes en fonction de la sélection, le plus simple serait d'avoir une petite table SELECTION(ID, ORDRE) dans laquelle tu enregistres tes identifiants à sélectionnner et l'ordre de retour et que tu joins avec la table consultée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT team.*
    FROM team
       INNER JOIN
             selection
          ON team.id = selection.id
    ORDER BY selection.ordre
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci mais comment fais-je pour le match retour, si l'on fixe l'ordre des équipes dans un tableau, si j'ai bien compris ce que tu proposes ?


    En fait j'avais fait cette requête car j'avais bloqué sur une autre avant dont vous connaissez sûrement la solution.

    1 table matches (id, name, id_team1, id_team2)
    1 table team (id, name)

    Est-ce possible en une seule requête d'obtenir tous les matchs avec le nom des 2 équipes ?

    Merci encore pour votre aide

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Il suffit de joindre la table matches deux fois avec la table team, en utilisant des alias :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  m.name
        ,   t1.name
        ,   t2.name
    FROM    matches AS m
        INNER JOIN
            team    AS t1
            ON  m.id_team1 = t1.id
        INNER JOIN
            team    AS t2
            ON  m.id_team2 = t2.id
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci, excellent c'est exactement ça que je cherchais!

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Autre solution
    Bonjour,

    J'avais le meme probleme, mais je l'ai reglé autrement avec "order by field"

    tout est expliqué ici

    http://www.dlcube.com/index.php?id=7...ash=ecbca29967

    http://dev.mysql.com/doc/refman/5.0/...ting-rows.html

    ++ Flk

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

Discussions similaires

  1. Obtenir un résultat dans l'ordre de la clause where
    Par Antherak dans le forum Requêtes
    Réponses: 1
    Dernier message: 29/10/2011, 11h04
  2. Ordre dans la clause WHERE
    Par farenheiit dans le forum SQL
    Réponses: 4
    Dernier message: 02/02/2010, 09h34
  3. [SQL] Requete avec ordre correspondant à la clause WHERE
    Par yobogs dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/06/2007, 14h32
  4. Respecter l'ordre d'affichage
    Par evincent dans le forum Mise en forme
    Réponses: 2
    Dernier message: 27/03/2007, 03h50
  5. algo de compression respectant l ordre
    Par polux dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 06/06/2005, 20h41

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