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 à partir d'une autre table


Sujet :

Requêtes MySQL

  1. #1
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 679
    Points : 1 951
    Points
    1 951
    Par défaut Tri à partir d'une autre table
    Salut all,

    Je desire afficher les resultats d'une requete par un tri d'une donnee d'une autre table.
    Pour faire plus explicite, voici l'exemple :

    Soit 2 tables A et B
    Dans A, il y a une zone 'lieu' qui corresponds a la zone 'id' de B
    Dans B, il y a les zones 'id' et 'texte'

    A partir de la, et sur une simple requete SELECT sur A, je voudrais que le ORDER BY se fasse sur le champs 'texte' de B.
    Surement a partir d'une jointure, mais j'aimerai bien avoir de l'aide pour avoir une requete propre et optimise.

    Merci pour votre aide.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,


    une simple jointure fera effectivement l'affaire : http://sqlpro.developpez.com/cours/sqlaz/jointures/

  3. #3
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 679
    Points : 1 951
    Points
    1 951
    Par défaut
    Merci

    Edit
    Le probleme est plus profond que ca, car j'ai besoin du resultat du select pour savoir quelle table je dois utiliser (soit B ou C selon le resultat)
    J'avais oublie de signaler la table C qui est identique a la B.

    Y a t'il un moyen de re-trier le resultat ou je dois relancer une requete complete ?

    Encore Merci.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Postez un exemple concret de votre besoin

  5. #5
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 679
    Points : 1 951
    Points
    1 951
    Par défaut
    Ok je vais etre plus precis et essayer de ne rien oublier

    Soit 3 tables A, B, C
    Dans A, il y a une zone 'lieu' qui corresponds a la zone 'id' de B et une zone 'type'
    Dans B et C, il y a les zones 'id' et 'texte'

    J'utilise cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT *
          FROM matableA
          WHERE unedata = xxx
          AND uneautre NOT IN (0, 99)
          ORDER BY lieu ASC';
    La ca me retourne bien les donnees desirees, mais j'aimerai rajouter un tri ASC sur la zone 'texte'.
    Le probleme est que pour savoir s'il faut utiliser B ou C, il faut connaitre la valeur de 'type'
    Donc je me pose la question sur comment faire la jointure (B ou C) en sachant que j'ai une inconnue avant de lancer la requete (lol pas sur d'etre tres clair)

    Merci pour ton aide.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bon,

    c'est pas vraiment plus concret.


    Vous avez cependant un problème de modélisation.


    Une parade à ce problème serai de faire 2 jointure externe sur vos table, en mettant en condition de jointure le coup du "type" (structure case when)

    Ensuite faites un order by sur les deux colonnes texte rajouté par ces deux jointures.

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Quelque chose comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT *
    FROM matableA A
    LEFT JOIN matableB B
        ON B.id = A.lieu
        AND A.type = '...'
    LEFT JOIN matableC
        ON C.id = A.lieu
        AND A.type = '...'
    WHERE unedata = xxx
    AND uneautre NOT IN (0, 99)
    ORDER BY lieu ASC, COALESCE(B.texte, C.texte);

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Utilisez des jointures externes et un CASE dans l'ORDER BY. Mais effectivement votre modèle est mauvais et vous aurez donc de nombreuses problématiques :
    1) performances catastrophiques
    2) difficulté d'écriture des requêtes

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 679
    Points : 1 951
    Points
    1 951
    Par défaut
    Merci a vous tous.
    Le code de Aieuuuuuu semble assez logique a la lecture, je vais tester.
    Je vais aussi voir pour le CASE WHEN qui semble etre ce qui me convient.
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 12h40
  2. Update d'une table a partir d'une autre table
    Par Yannis06 dans le forum Oracle
    Réponses: 6
    Dernier message: 11/08/2005, 12h32
  3. remplir un champ d'une table à partir d'une autre table
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/02/2005, 17h48
  4. Réponses: 5
    Dernier message: 06/01/2005, 13h07
  5. Réponses: 3
    Dernier message: 09/07/2004, 11h23

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