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 :

Trier le résultat de deux requêtes


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance reprographie
    Inscrit en
    Septembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance reprographie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Trier le résultat de deux requêtes
    Bonjour,

    Dans mon application PHP, j'ai un formulaire de recherche, où l'utilisateur saisi son terme de recherche et une table (ou toutes).
    Le traitement de recherche s'applique sur les champs nom et immatriculation des tables.

    Je souhaiterai afficher le résultat de deux requêtes séparées par ordre (croissant ou décroissant peu importe).
    Lorsque j'exécute séparément mes deux requêtes, c'est tout bon.
    Là ou je bloque c'est lorsque je dois les mettre ensemble. auriez vous une idée ?

    voici mes deux requêtes :
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT mId, mImmatriculation, mNom 
    FROM motrice 
    WHERE mNom like :recherche OR mImmatriculation like :recherche 
    ORDER BY mNom ASC
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT vId, vImmatriculation, vNom 
    FROM voiture 
    WHERE vNom like :recherche OR vImmatriculation like :recherche 
    ORDER BY vNom ASC
    sachant que :recherche est le terme de recherche saisi par l'utilisateur.

    j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT mId, mImmatriculation, mNom, vId, vImmatriculation, vNom 
    FROM motrice, voiture 
    WHERE mNom like :recherche OR mImmatriculation like :recherche OR vNom like :recherche OR vImmatriculation like :recherche 
    ORDER BY mNom ASC
    et le résultat que j'obtiens ne va pas du tout car pour chaque couple nom/immatriculation de la table motrice j'ai tout les couples nom/immatriculation de la table voiture qui répondent au critère de recherche.

    Ma base de données n'est pas optimisée, je suis bien conscient, mais avant de tout refaire, est ce possible de trier le résultat de deux requêtes ?

    En vous remerciant pour votre aide

    Cordialement

    Lunick

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Bonjour,
    Dans la deuxième requête tu fais un produit cartésien entre les deux tables (filtrés sur les conditions du WHERE, mais quand même).
    Ce serait plus visible en utilisant JOIN, tu verrais qu'il n'y a aucun "lien" entre les deux tables.

    Là ce que tu cherches à faire est une UNION entre les deux requêtes.

    Tatayo.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    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 109
    Points : 28 439
    Points
    28 439
    Par défaut
    N'est-ce pas plutôt cela que tu cherches à faire ?
    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
    16
    SELECT  'motrice'           AS  Materiel
        ,   mId                 AS  Id
        ,   mImmatriculation    AS  Immatriculation
        ,   mNom                AS  Nom
    FROM    motrice 
    WHERE   mNom                LIKE :recherche 
        OR  mImmatriculation    LIKE :recherche 
    UNION
    SELECT  'voiture'
        ,   vId
        ,   vImmatriculation
        ,   vNom 
    FROM    voiture 
    WHERE   vNom                LIKE :recherche 
        OR  vImmatriculation    LIKE :recherche 
    ORDER BY Nom ASC

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance reprographie
    Inscrit en
    Septembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance reprographie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    al1_24 c'est tout à fait le résultat que j'attendais.

    J'ai modifié votre code en ajoutant les "AS ..." pour la partie voiture : il faut bien les mettre ?

    Je vous remercie pour votre aide

    Cordialement

    Lunick

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    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 109
    Points : 28 439
    Points
    28 439
    Par défaut
    Citation Envoyé par Lunick90 Voir le message
    J'ai modifié votre code en ajoutant les "AS ..." pour la partie voiture : il faut bien les mettre ?
    Non c'est inutile ; une colonne ne peut avoir qu'un seul nom donc seul le nom de colonne donné dans la première sous-requête de l'union est pris en compte.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance reprographie
    Inscrit en
    Septembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Technicien maintenance reprographie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Très bien
    Je vous remercie pour votre retour

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

Discussions similaires

  1. Trier les résultats d'une requête à l'aide d'un listbox
    Par magoo33 dans le forum Coldfusion
    Réponses: 2
    Dernier message: 17/11/2008, 22h27
  2. Importer le résultat de deux requête dans un Excel
    Par alexandrebergercyr dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/05/2007, 18h21
  3. Récupérer et trier le résultat d'une requête SQL
    Par Bodom-Child dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/10/2006, 07h38
  4. [PostGreSQL] Trier une liste ayant deux requêtes comme source
    Par Mat_DZ dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 09/08/2006, 10h51
  5. Afficher le ratio du résultat de deux requêtes
    Par decour dans le forum Access
    Réponses: 25
    Dernier message: 07/11/2005, 19h54

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