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 :

De nouveau, besoin de vos conseils pour une jointure svp :)


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut De nouveau, besoin de vos conseils pour une jointure svp :)
    Bonjour,
    Je m'adresse de nouveau à vous ne voulant pas faire de bétises sur ma bdd.
    Voila, je dois ajouter une majorations suivant des tailles pour certains produits et certaines conditions.

    Je viens de rajouter une collections sur ma base de données mais j'ai plus de 100 nouveau produits (vetements), et j'ai un certain nombre d'attributs pour ceux ci (que je dois pour l'instant rentrer à la main). Alors je me suis dis qu'avec une requete Sql le tour serai joué.

    J'ai donc une table "products" et une table "products attributs"
    dans la table products j'ai : le prix, l'id du produit et le champ image (qui me permettra de différencier ces produist des autres

    Dans la table attributs j'ai l'id du produit, un id d'attribut, le champ option value id (qui identifie le champ) et option value price (qui indique le prix hors tva de la majoration.

    Donc le calcul du prix de la majoration ce fait de la sorte.
    Le prix de la majoration c'est par exemple 10% du prix du produit - 19.6%


    En Francais
    Mettre à jour dans la table products_attributes, le champ options_values_price = (le prix du produit (dans la table products) *1.1 - le prix (##donc la majoration##) - la tva)

    Quand options_values_id vaut 8 (##par exemple pour la taille 50##)
    ET quand l'id produit de la table products_attributes fait parti de la table productsmais n'incluant que les produits dont le champ image a pour valeur 123456789



    en sql à ma sauce mais pas certain que ca marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE `products_attributes` SET `options_values_price` = 
     
    ((SELECT `products_price` from products) * 1.1 - products_price) *((1-(19,6/100)))  WHERE `options_values_id` = 8
     
    WHERE `products_id` IN  (SELECT `products_id` FROM `products` 
    WHERE `products_image`='21321321');

    Vous en pensez quoi ?
    c'est correcte ou bien y a t il des choses à modifier ?
    Peut etre on peu améliorer ?

    Merci par avance,
    Marc

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    ce qui me saute aux yeux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE `products_id` IN  (SELECT `products_id` FROM `products` 
    WHERE `products_image`='21321321');
    ça pourrait être fait par une jointure, non ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * 
    from products as p1
    inner join products as p2
            on p1.products_id = p2.products_id
    where p2.products_image='21321321'

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse Mathusalem
    alors je peux remplacer par ton code avec le inner join ?

    et faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    PDATE `products_attributes` SET `options_values_price` = 
     
    ((SELECT `products_price` FROM products) * 1.1 - products_price) *((1-(19,6/100)))  WHERE `options_values_id` = 8
     
    WHERE `products_id` IN (
     
    SELECT * 
    FROM products AS p1
    INNER JOIN products AS p2
            ON p1.products_id = p2.products_id
    WHERE p2.products_image='21321321');
    ?

    MErci encore

  4. #4
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    non pas du tout, je pensais remplacer le in par une jointure

    d'ailleurs ta requête fonctionnait avant ?
    j'ai l'impression qu'il y a un where en trop.


    c'est pas mieux comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE products_attributes 
    SET pa.options_values_price = 
                   p.products_price  * 1.1 - pa.products_price * (1-(19,6/100))
    FROM  products_attributes as pa
    inner join products as p
        on pa.products_id = p.products_id
    WHERE pa.options_values_id = 8
    and p.products_image='21321321'

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    Merci encore pour ton aide.
    En fait j'ai tapé la requete et regardé comment il fallait faire avec le inner join mais je ne comprennai pas bien.

    Ta requete semble bonne mais je n'arrive pas a la rentrer sur phpmyadmin. Ca me donne des erreurs de syntaxe la

    la requete avec les ` ` pour les champs
    mais ca ne fonctionne pas et sans non plus :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE `products_attributes` 
    SET `pa.options_values_price` = 
    ((`p.products_price`  * 1.1) - (`pa.products_price` * (1-(19,6/100)))
    FROM  `products_attributes` AS `pa`
    INNER JOIN `products` AS `p`
        ON `pa.products_id` = `p.products_id`
    WHERE `pa.options_values_id` = 8
    AND `p.products_image`='123456'
    j'ai le message d'erreur suivant
    requête SQL:

    UPDATE `products_attributes` SET `pa.options_values_price` = (
    (
    `p.products_price` * 1.1
    ) - ( `pa.products_price` * ( 1 - ( 19, 6 /100 ) ) FROM `products_attributes` AS `pa` INNER JOIN `products` AS `p` ON `pa.products_id` = `p.products_id` WHERE `pa.options_values_id` =8 AND `p.products_image` = '123456789'

    MySQL a réponduocumentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `products_attributes` AS `pa`
    INNER JOIN `products` AS `p`
    ON `pa.pr' at line 4
    Merci encore pour ton aide

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 803
    Points
    30 803
    Par défaut
    La syntaxe UPDATE ... FROM n'est pas (encore) dans le standard SQL
    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.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse .La requete n'est pas saisissable alors ?
    portant j'ai fait des requetes du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE `products_description` SET `products_description` = ' ma description'
    WHERE `products_id` IN  (SELECT `products_id` FROM `products` WHERE `manufacturers_id`=20);
    ??

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/09/2010, 15h15
  2. Réponses: 1
    Dernier message: 06/04/2010, 12h42
  3. Réponses: 5
    Dernier message: 28/12/2008, 01h20
  4. J'ai besoin de vos conseils pour mon site chez-Gaëlle
    Par Gaëlle71 dans le forum Mon site
    Réponses: 2
    Dernier message: 30/04/2007, 23h09
  5. Besoin d'un conseil pour une sélection Access/fichier
    Par Oluha dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/03/2005, 19h10

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