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 :

Requête avec des champs dynamiques


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 52
    Points : 49
    Points
    49
    Par défaut Requête avec des champs dynamiques
    Bonjour à tous,

    je suis confronté à un problème que je n'arrive pas à résoudre. J'ai une table ticket comportant une liste de champs standards, puis il est possible de rajouter des champs supplémentaires afin de personnaliser les tickets.

    J'ai donc ma table ticket, une table champs supplémentaires avec le nom du champ et une table valeurs qui est fait la jointure entre les deux tables et c'est ici que je stocke la valeur de mon champ supplémentaire pour un ticket.

    Lorsque je veux filtrer mes tickets, l'utilisateur peut à travers un formulaire sélectionner les champs et saisir des valeurs. Tout fonctionne sauf lorsque dans la recherche, il y a au moins 2 champs supplémentaires.

    Ma requête ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT t.*
    FROM ticket t, champssupp cs, valeurs v
    WHERE
    t.libelle LIKE 'exemple'
    AND
    (cs.libelle LIKE 'champsupp1' AND v.valeur LIKE 'valeurpossiblesupp1')
    AND
    (cs.libelle LIKE 'champsupp2' AND v.valeur LIKE 'valeurpossiblesupp2')
     
    AND jointures ..
    Ici je recherche tous les tickets avec comme valeur (valeurpossiblesupp1) pour le champ supplémentaire (champsupp1) et avec comme valeur (valeurpossiblesupp2) pour le champ supplémentaire (champsupp2).

    Cela ne fonctionne pas puisque les deux conditions ne peuvent pas être égales en même temps. Mais je ne vois pas comment contourner ce problème..

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    mai 2002
    Messages
    8 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 8 973
    Points : 30 129
    Points
    30 129
    Par défaut
    Citation Envoyé par icl1c Voir le message
    Cela ne fonctionne pas puisque les deux conditions ne peuvent pas être égales en même temps.
    C'est donc que l'une des deux conditions doit être vérifiée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WHERE
    t.libelle LIKE 'exemple'
    AND
    ((cs.libelle LIKE 'champsupp1' AND v.valeur LIKE 'valeurpossiblesupp1')
     OR
     (cs.libelle LIKE 'champsupp2' AND v.valeur LIKE 'valeurpossiblesupp2')
    )
    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.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 913
    Points : 11 913
    Points
    11 913
    Par défaut
    Bonjour,
    Je dirai plutôt qu'il faut faire deux jointures, une pour chaque "champ supplemetaire":
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT t.*
    FROM ticket t
    inner join champssupp cs1 on ...
    inner join valeurs v1 on ...
    inner join champssupp cs2 on ...
    inner join valeurs v2 on ...
    WHERE
    t.libelle LIKE 'exemple'
    and cs1.libelle LIKE 'champsupp1' AND v1.valeur LIKE 'valeurpossiblesupp1' 
    and cs2.libelle LIKE 'champsupp2' AND v2.valeur LIKE 'valeurpossiblesupp2'

    Tatayo.

  4. #4
    Membre du Club
    Inscrit en
    juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 52
    Points : 49
    Points
    49
    Par défaut
    @al1_24 : les deux conditions doivent être vérifiées, donc cela ne va pas.

    @tatayo : si j'ai 4 ou 5 champs supplémentaires, il va falloir faire 4 ou 5 jointures, niveau performance c'est pas affreux?

    merci pour votre aide, je vais tester le coup des jointures.

  5. #5
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : février 2012
    Messages : 652
    Points : 1 877
    Points
    1 877
    Par défaut
    Si vous ne savez pas combien de champs il y a à récupérer alors il faudrait peut-être songer à du SQL dynamique pour déterminer le nombre de jointures à faire

    De même si vos recherche porte sur un nom générique comme dans votre exemple 'champsupp1', 'champsupp2', ... Il est envisageable d'effectuer une recherche sur ''champsupp' puis de manipuler les données pour obtenir le résultat souhaité

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 913
    Points : 11 913
    Points
    11 913
    Par défaut
    [QUOTE=icl1c;6726393@tatayo : si j'ai 4 ou 5 champs supplémentaires, il va falloir faire 4 ou 5 jointures, niveau performance c'est pas affreux?
    [/QUOTE]

    C'est pourtant ce que je fais (avec du Sql généré par programmation), parfois avec bien plus de 5 jointures.
    Si les bons indexes sont là, ce n'est pas un problème.

    Tatayo.

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    mai 2002
    Messages
    8 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 8 973
    Points : 30 129
    Points
    30 129
    Par défaut
    Avec un exemple ce serait peut être plus parlant...
    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.

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

Discussions similaires

  1. [MySQL] Remplir une bs Mysql avec des champs dynamiques js
    Par lambo89 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/06/2011, 11h22
  2. Requêtes avec des champs de type array
    Par ZIED dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2011, 10h09
  3. créer un doc avec des champs dynamiques
    Par amoric69 dans le forum Autres SGBD
    Réponses: 0
    Dernier message: 18/01/2011, 19h51
  4. Critères avec opérateurs dans une requête avec des champs calculés
    Par lmollard dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/05/2008, 18h53
  5. Réponses: 4
    Dernier message: 22/11/2007, 19h23

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