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 :

Probleme de test dans requete SQL


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Par défaut Probleme de test dans requete SQL
    Bonjour, je vous explique mon soucis ^^ qui est de taille car je suis dessus depuis deux jour mais rien n'y fait : je vous initialise la situation car c'est assez compliqué ^^( je programme en zend framework ) :

    Une table Réduction avec comme champ :

    noTime : ne dépend pas d'une date
    pourcentage : réduction faite en pourcentage
    prix : réduction avec une somme directement
    tranchInf : doit etre inférieur ou égale a 1
    debut : date du début de la réduction
    fin : date de la fin de la réduction
    Une Table Tarif :
    prix : prix du produit
    Une Table Produit :
    avec id, ....
    et une Table CategorieProduit qui fait le lien entre les Produits et les Catégorie :
    Categorie_id
    Produit_ id ...
    C'est la que tout ce corse je souhaiterais que ma requête me ressorte par prix croissant les produits prenant en compte les produit avec une réduction(prix) avec une réduction (pourcentage) et ceux sans réduction du tout.
    J'ai réussit a avoir mes produit classé avec les réduction mais du coup les produit sans réduction sont a nul et n'ont pas leur prix d'origine qui sont dans la Table Tarif ^^
    Suis-je claire ?
    Ma requête était :

    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
    SELECT `p`.*, Tarif.prix - (
        SELECT SUM(prix+pourcentage)
        FROM Reduction 
        WHERE Produit_id = p.id 
        AND trancheInf <=1 
        AND (
            noTime =1 
            OR now( ) BETWEEN debut AND fin 
        )
    ) AS tarif 
    FROM `Produit` AS `p`
    INNER JOIN `CategorieProduit` ON p.id = CategorieProduit.Produit_id 
    INNER JOIN `Tarif` ON p.id = Tarif.Produit_id
    WHERE (CategorieProduit.Categorie_id =1)
    ORDER BY `tarif` ASC
    C'est pour un site internet ou je voudrais un classement par prix croissant en fonction des prix réduit si il y a une réduction ou par leur prix non réduit si il n'éxiste pas de réductions ^^
    Merci d'avance de m'éclairer car je pète un plomb Merci

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 054
    Par défaut
    Bonjour et bienvenue sur le forum .

    Avant de rentrer dans le détail de la requête, une petite question : pourquoi faire la somme des prix + pourcentage dans les réductions ?
    Ca ne serait pas plutôt prix * pourcentage ?

    Sinon, sans y avoir trop réfléchi, je pense qu'en passant plutôt par une jointure à gauche supplémentaire vers la table des réductions, ça sera sûrement plus simple et surtout plus efficace.
    Pour ça, il faudrait savoir également quels champs de la table produits t'intéressent, plutôt que de tous les ramener avec l'étoile (c'est pas bien, l'étoile ).

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Par défaut
    Alors pour la question des pourcentage et des prix j'explique ^^
    Un produit peut avoir une réduction rentré par prix donc ex : prix : 1200 réduction 20 donc prix final 1180 ^^
    Un produit peut avoir aussi une réduction par pourcentage ex : prix :1000 réduction de 10% prix final : 900
    Seulement un produit peut avoir plusieurs réductions il peux avoir -30€ + -15% plus encore d'autres réduction suivant les cas !^^ voila pour l'explication des deux champs. Seulement quand je fais mon opération simple du prix - toutes les réductions, ça marche seulement ceux qui n'en ont aucune il me renvoie NULL au lieu du prix de départ sans réduction comment pourrais je faire pour mettre un test par exemple : si la somme des réduction est NULL alors prix final = prix - 0 et non pas prix-NULL ce qui me donnera bien le prix de départ ^^ et non un résultat NULL je pense ?

    Tout ceci pour faire un classement par prix( réduction comprise) et non par les prix de départ ( qui ont pourtant parfois une réduction ) ^^

    J'espère avoir été plus clair, car par contre je n'ai pas compris comment votre réponse pouvait m'aider ^^ pouvez vous s'il vous plait un peu plus m'éclairer je ne doit pas être sur le même raisonnement.

    Ce qui me tracasse le plus ce n'est pas les pourcentage ce sont surtout les NULL qu'il me remplit a la place des ancien prix ^^

    ( PS : je n'ai besoin d'aucun des champs de la table Produit juste de leur id pour que les bons prix soit sur les bons produits et dans les bonnes catégories ^^ DSL pour ce pavé indigeste ^^)

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(COALESCE(prix,0)+COALESCE(pourcentage,0))
    devrait résoudre ton problème avec les NULL
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Par défaut
    Je suis désolé mais votre code n'a pas marché je n'ai toujours pas trouvé comment ne pas renvoyé NULL
    Merci de creuser avec moi
    Cordialement

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Par défaut
    Ne serait ce pas ma sous requete qui renvoit NULL car si il ne trouve pas le produit(si il n'a pas de reductions)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    (SELECT(SUM(COALESCE(prix,0)+COALESCE((prix*pourcentage)/100,0))
        			FROM Reduction 
        				WHERE Produit_id = p.id 
        					AND ( noTime =1  OR now( ) BETWEEN debut AND fin ))
    Donc puis-je mettre un COALESCE SUR MON SELECT pour que ma requete renvoie 0 si elle est NULL
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT `p`.*, (Tarif.prix -(
        SELECT(COALESCE(SUM(COALESCE(prix,0)+COALESCE((prix*pourcentage)/100,0))
        			FROM Reduction 
        				WHERE Produit_id = p.id 
        					AND ( noTime =1  OR now( ) BETWEEN debut AND fin ))),0))
     AS tarif 
    FROM `Produit` AS `p`
    INNER JOIN `CategorieProduit` ON p.id = CategorieProduit.Produit_id 
    INNER JOIN `Tarif` ON p.id = Tarif.Produit_id
    WHERE (CategorieProduit.Categorie_id =1) AND trancheInf <=1 
    ORDER BY `tarif` ASC
    Est ce autorisé ou sinon comment me conseilleriez vous de faire ?
    Merci d'avance ^^

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

Discussions similaires

  1. Probleme recupération valeur dans un controle onglet dans requete SQL
    Par golfmatcam dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 08/10/2013, 21h50
  2. Probleme ADO adapter une requete sql pour l'utiliser dans mon code vb6
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/04/2009, 15h53
  3. Probleme de date dans requete sql de supression
    Par scons dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/08/2008, 09h01
  4. Probleme de date dans requete SQL vers base de donnée MS Access
    Par Uren dans le forum Persistance des données
    Réponses: 1
    Dernier message: 04/08/2008, 13h06
  5. Probleme de test dans un boucle
    Par PrinceMaster77 dans le forum ASP
    Réponses: 14
    Dernier message: 15/06/2004, 12h32

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