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 :

Grouper des requête sql et respecter l'ordre d'apparition des résultats


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Grouper des requête sql et respecter l'ordre d'apparition des résultats
    Bonjour,

    J'ai quatres requêtes:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select idProduit from maTable WHERE titre Like '%texte%' UNION
    select idProduit from maTable WHERE auteur Like '%texte%' UNION
    select idProduit from maTable WHERE code Like '%texte%'  UNION
    select idProduit from maTable WHERE divers Like '%texte%'
    Je voudrais que les premiers idProduit dans le jeu de résultat soient ceux de la première requête, que les suivants soient ceux de la deuxième, etc.

    Est-ce possible en SQL de faire cela ?

    J'utilise SQL Server 2005 Express edition.

    Merci,
    David

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT idProduit, 1 AS Ordre FROM maTable WHERE titre LIKE '%texte%' 
    UNION ALL
    SELECT idProduit, 2 FROM maTable WHERE auteur LIKE '%texte%' 
    UNION ALL
    SELECT idProduit, 3 FROM maTable WHERE code LIKE '%texte%'  
    UNION ALL
    SELECT idProduit, 4 FROM maTable WHERE divers LIKE '%texte%'
    ORDER BY Ordre
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT idProduit, 1 AS Ordre FROM maTable WHERE titre LIKE '%texte%' 
    UNION ALL
    SELECT idProduit, 2 FROM maTable WHERE auteur LIKE '%texte%' 
    UNION ALL
    SELECT idProduit, 3 FROM maTable WHERE code LIKE '%texte%'  
    UNION ALL
    SELECT idProduit, 4 FROM maTable WHERE divers LIKE '%texte%'
    ORDER BY Ordre
    Merci beaucoup ton aide!

    Après avoir exécuter cette requête, je m'apperçois que j'ai encore un petit problème avec des idProduit qui sont dupliqués. Ainsi j'obtient:

    11 1
    4 2
    4 3
    7 3
    11 3
    6 4

    Si j'ajoutes DISTINCT sur chaque ligne, cela ne règle malheureusement pas mon problème. Est-ce que tu aurais une autre formule géniale pour régler le problème des doublons ?

    Merci,
    David

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Tes doublons sont des éléments qui existent dans plusieurs de tes tables. Mettre un DISTINCT sur chaque table ne peut donc pas régler le problème ; utiliser des UNION à la place de mes UNION ALL le ferait, mais seulement si on vire les 1, 2, 3, 4... et tu n'aurais plus le tri que tu veux.

    Tu requêtes vraiment quatre fois la même table, ou pas ? Si ce n'est pas le cas, tu peux faire qqch comme ça :

    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
    17
    18
    19
    20
    21
    22
    SELECT idProduit, 1 AS Ordre 
    FROM maTable1 
    WHERE titre LIKE '%texte%' 
    UNION ALL
    SELECT idProduit, 2 
    FROM maTable2 
    WHERE auteur LIKE '%texte%' 
      AND idProduit NOT IN (SELECT idProduit FROM maTable1 WHERE titre LIKE '%texte%' )
    UNION ALL
    SELECT idProduit, 3 
    FROM maTable3 
    WHERE code LIKE '%texte%'
      AND idProduit NOT IN (SELECT idProduit FROM maTable1 WHERE titre LIKE '%texte%' )  
      AND idProduit NOT IN (SELECT idProduit FROM maTable2 WHERE titre LIKE '%texte%' )  
    UNION ALL
    SELECT idProduit, 4 
    FROM maTable4 
    WHERE divers LIKE '%texte%'
      AND idProduit NOT IN (SELECT idProduit FROM maTable1 WHERE titre LIKE '%texte%' )  
      AND idProduit NOT IN (SELECT idProduit FROM maTable2 WHERE titre LIKE '%texte%' )  
      AND idProduit NOT IN (SELECT idProduit FROM maTable3 WHERE titre LIKE '%texte%' )
    ORDER BY Ordre
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Tu requêtes vraiment quatre fois la même table, ou pas ?
    Oui.

    Je sais que c'est étrange mais voici la situation

    J'ai une fonction de recherche dans mon site Internet (vente de livre). Un usager entre un mot à rechercher. Je veux d'abord afficher les résultat trouver pour la recherche dans le champ titre, ensuite dans le champ auteur, etc

    Question de lui afficher les informations qui l'intéresseront le plus.

    J'espère être assez clair...

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Donc c'est la condition WHERE qui change ? Tu peux t'inspirer de la requête que j'ai ajoutée entre-temps dans mon mail précédent, mais en jouant sur les WHERE et non sur les tables.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Ah non, j'ai mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT idProduit 
    FROM maTable 
    WHERE titre LIKE '%texte%' 
      OR auteur LIKE '%texte%' 
      OR code LIKE '%texte%'  
      OR divers LIKE '%texte%'
    ORDER BY CASE
        WHEN titre  LIKE '%texte%' THEN 1
        WHEN auteur LIKE '%texte%' THEN 2
        WHEN code   LIKE '%texte%' THEN 3
        WHEN divers LIKE '%texte%' THEN 4
      END
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Oh la! Tu es vraiment fort!

    C'est çca le problème avec le fait d'être un généraliste comme moi, on n'arrivera jamais à se perfectionner dans un domaine pour pondre des trucs géniaux comme cela!

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Ah oui...Merci!

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

Discussions similaires

  1. Valeur des formulaire réutilisées dans des requètes SQL.
    Par cotmar dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 09/05/2006, 10h16
  2. Fabriquer des requêtes sql à partir d'un document xml
    Par ktel dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 18/10/2005, 16h45
  3. [MFC] comment écrire des requêtes SQL
    Par kitsune dans le forum MFC
    Réponses: 9
    Dernier message: 27/09/2005, 15h23
  4. Journal des requêtes SQL effectuées
    Par Kcirtap dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 18/07/2005, 09h58
  5. Recherche ibrairie pour éxécuter des requêtes SQL via C++
    Par daemon dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 14/06/2004, 10h28

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