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 SQL très difficile


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    .net
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .net

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Requête SQL très difficile
    Bonjour,
    j'ai à ma charge de réaliser un algorithme pour test. En ce moment je bloque sur une requête SQL que je trouve assez difficile.
    Au début j'avais cru que j'avais fait une bonne requête, mais au final je me suis rendu compte que ce n'était pas le cas.
    Je doit réaliser un filtre sur des produits selon des critères défini dans la base qui sont cumulé.

    les tables :
    Produit : idProduit int, nom, Critère1, Critère2, etc...
    Filtre : idFiltre int, nom nvarchar;
    ConditionFiltre : idConditionFiltre int, critèreFiltre int, #idFiltre_filtre int
    ConditionFiltreValeurList : idConditionFiltreValeurList int, valeurConditionFiltre nvarchar, #idConditionFiltre_ConditionFiltre int

    Ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT *
    FROM Produit, Filtre
    INNER JOIN ConditionFiltre ON idFiltre = idFiltre_filtre
    LEFT JOIN ConditionFiltreValeurList ON idConditionFiltre = idConditionFiltre_ConditionFiltre
    WHERE idFiltre = 60 AND 
    ((critèreFiltre = 1 AND valeurConditionFiltre = Critère1) OR (critèreFiltre = 2 AND valeurConditionFiltre = Critère2)
    OR (critèreFiltre = 3 AND valeurConditionFiltre = Critère3) OR (critèreFiltre = 4 AND valeurConditionFiltre = Critère4) OR etc...)
    dans mon code si le produit appartient à au moins un de ces critères il apparaîtra, alors qu'il faut afficher les produits qui sont avec toutes ces critères
    Si je met des "AND" au lieu des "OR" il n'y aura aucun produit, c'est normal puisque "critèreFiltre" ne sera jamais égale à 1, 2, 3, 4, etc dans une seule ligne de la table générer.
    tout en sachant le problème de conversion puisque les critères sont des données différentes (int, float, date, string) alors que "valeurConditionFiltre" est en string.
    je suis quasiment certain que j'ai oublié des détail à vous montré.

    Pouvez-vous m'aider svp à résoudre cette recette parce que je suis au même point depuis plusieurs jours?

    merci d'avance

  2. #2
    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
    Par défaut
    Citation Envoyé par mistergamer Voir le message
    je suis quasiment certain que j'ai oublié des détail à vous montré.
    En effet, connaitre votre SGBD sera sans doute utile.
    Et pour ce type de problème, un jeu d'essai sous forme de CREATE TABLE + INSERT me semble indispensable : sans cela, on va perdre beaucoup de temps a bien comprendre ce que vous voulez.

  3. #3
    Membre habitué
    Homme Profil pro
    .net
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .net

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    En effet, connaitre votre SGBD sera sans doute utile.
    Et pour ce type de problème, un jeu d'essai sous forme de CREATE TABLE + INSERT me semble indispensable : sans cela, on va perdre beaucoup de temps a bien comprendre ce que vous voulez.
    merci je vient de faire une analyse comme demandé. et je viens de relever d'autres éléments comment il y a des critère de comparaison comme (>, <, >=, <=), mais c'est des éléments que je peux résoudre après avoir résolue ce problème de condition.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 039
    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 : 22 039
    Billets dans le blog
    6
    Par défaut
    il faut que vous fassiez autant de jointure avec vos tables de filtrage que de conditions exigées.

    Sans le DDL de vos tables difficile de vous montrer, un exemple

    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/ * * * * *

  5. #5
    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
    Par défaut
    ou un NOT EXISTS : les produits répondant à tous les critères, sont les produits pour lesquels il n'existe pas de critère non avéré.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 039
    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 : 22 039
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    ou un NOT EXISTS : les produits répondant à tous les critères, sont les produits pour lesquels il n'existe pas de critère non avéré.
    Dans ce cas il faut qu'il n'y ait que des ET et pas de OU !

    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/ * * * * *

Discussions similaires

  1. Requête SQL très lente
    Par fishingman dans le forum VB.NET
    Réponses: 9
    Dernier message: 13/08/2012, 12h15
  2. Requête SQL très longue à s'exécuter
    Par dreamcat1 dans le forum SQL
    Réponses: 10
    Dernier message: 22/03/2010, 11h44
  3. Requête sql trés longue?
    Par naturel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2008, 11h04
  4. Exécuter une requête SQL très longue
    Par coraziari_l dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 10/01/2008, 17h07
  5. Réponses: 2
    Dernier message: 04/03/2006, 10h47

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