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 :

Mise à jour automatique du stock avec un trigger


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Mise à jour automatique du stock avec un trigger
    Bonjour à tous,
    nouveau sur ce forum, j'espère pouvoir trouver un petit peu d'aide après de longues heures déjà à chercher la solution à mon problème . J'ai pourtant parcouru ce site de long en large ou j'ai plusieurs fois trouvé la réponse à mon problème, mais là je sèche. En quelques mots, je souhaite pouvoir faire une mise à jour automatique de mon stock. Donc à chaque fois qu'un client passe commande, celui ci remplit son panier. Chaque ligne de la table_panier part ensuite dans une table ligne_commande. Le panier est ensuite supprimé et les lignes de la table ligne_commande partent dans la table_commande. Donc ma requête se fait lorsque les lignes commandes sont crées, je fait une mise à jour de ma table_ produits.
    Voici ma requête ci-dessous et chaque fois la même erreur:
    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 'UPDATE produits.stock_qty SET shop_produits.stock_qty=shop_produits.stock_qty - ' at line 5
    Si quelqu'un pouvait m'éclairer, je lui serait grandement reconnaissant!
    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
    $query_ligne_commande = sprintf(
    "CREATE TRIGGER stock 
    AFTER INSERT ON shop_ligne_commande 
    FOR EACH ROW 
    BEGIN 
    UPDATE produits.stock_qty SET shop_produits.stock_qty=shop_produits.stock_qty - shop_ligne_commande.quantite FROM shop_produits, shop_ligne_commande WHERE shop_produits.id=shop_ligne_commande.article;
    END;
    INSERT INTO shop_ligne_commande (commande, article, prix_ht, prix_ttc, quantite, total_ht, total_ttc, frais_port, `option`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
    GetSQLValueString($row_commande['id'], "int"),
    GetSQLValueString($row_panier['article'], "int"),
    GetSQLValueString($row_panier['prix_ht'], "double"),
    GetSQLValueString($row_panier['prix_ttc'], "double"),
    GetSQLValueString($row_panier['quantite'], "int"),
    GetSQLValueString($row_panier['total_ht'], "double"),
    GetSQLValueString($row_panier['total_ttc'], "double"),
    GetSQLValueString($row_panier['frais_port'], "double"),
    GetSQLValueString($row_panier['option'], "text"));

  2. #2
    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 : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Tout bête problème de syntaxe avec UPDATE multitable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE items,month SET items.price=month.price
    WHERE items.id=month.id;
    Comme tu le vois dans cet exemple extrait de la doc, pas de clause FROM les tables sont listées séparées par des virgules après la commande UPDATE et la jointure se fait dans la clause WHERE.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Toujours pas :-(
    Merci pour ta réponse, ben j'ai enlevé le FROM mais maintenant j'ai celui ci de message:
    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 '; INSERT INTO shop_ligne_commande (commande, article, prix_ht, prix_ttc, quantit' at line 6
    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
    $query_ligne_commande = sprintf(
    "CREATE TRIGGER stock 
    AFTER INSERT ON shop_ligne_commande 
    FOR EACH ROW 
    BEGIN 
    UPDATE produits.stock_qty SET shop_produits.stock_qty=shop_produits.stock_qty - shop_ligne_commande.quantite WHERE shop_produits.id=shop_ligne_commande.article;
    END;
    INSERT INTO shop_ligne_commande (commande, article, prix_ht, prix_ttc, quantite, total_ht, total_ttc, frais_port, `option`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
    GetSQLValueString($row_commande['id'], "int"),
    GetSQLValueString($row_panier['article'], "int"),
    GetSQLValueString($row_panier['prix_ht'], "double"),
    GetSQLValueString($row_panier['prix_ttc'], "double"),
    GetSQLValueString($row_panier['quantite'], "int"),
    GetSQLValueString($row_panier['total_ht'], "double"),
    GetSQLValueString($row_panier['total_ttc'], "double"),
    GetSQLValueString($row_panier['frais_port'], "double"),
    GetSQLValueString($row_panier['option'], "text"));
     
    mysql_select_db ($database_condom_local, $condom_local);
    $Result1 = mysql_query($query_ligne_commande, $condom_local) or die (mysql_error());
    $query_suppr_panier = sprintf("DELETE FROM shop_panier WHERE id= '%s'",
    GetSQLValueString($row_panier['id'], "int"));

  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 : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Les requêtes envoyées par php ne peuvent contenir qu'une seule ligne de commande SQL.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Si j'écris mon code comme ça, il n'y a effectivement plus de message d'erreur mais il ne se passe rien. Aucune mise à jour se fait. Il devrait récupérer la valeur quantite insérée dans la table ligne_commande.

    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
    $query_ligne_commande = sprintf("INSERT INTO shop_ligne_commande (commande, article, prix_ht, prix_ttc, quantite, total_ht, total_ttc, frais_port, `option`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) ",
    GetSQLValueString($row_commande['id'], "int"),
    GetSQLValueString($row_panier['article'], "int"),
    GetSQLValueString($row_panier['prix_ht'], "double"),
    GetSQLValueString($row_panier['prix_ttc'], "double"),
    GetSQLValueString($row_panier['quantite'], "int"),
    GetSQLValueString($row_panier['total_ht'], "double"),
    GetSQLValueString($row_panier['total_ttc'], "double"),
    GetSQLValueString($row_panier['frais_port'], "double"),
    GetSQLValueString($row_panier['option'], "text"));
     
    $query_shop_produitse = sprintf("CREATE TRIGGER stock 
    AFTER INSERT ON shop_ligne_commande 
    FOR EACH ROW 
    BEGIN 
    UPDATE produits.stock_qty SET shop_produits.stock_qty=shop_produits.stock_qty - shop_ligne_commande.quantite WHERE shop_produits.id=shop_ligne_commande.article;
    END");

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut ça avance...
    Voilà, j'ai essayé autre chose et ça fonctionne prèsque... Si je remplace $querry_produit par $querry_ligne_commande la mise à jour du stock se fait mais pas le INSERT TO et si je laisse comme ça le INSERT TO fonctionne mais pas la mise à jour... Une idée?
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    $compteur = 0;
    
    while ($row_panier = mysql_fetch_assoc($panier) and $compteur <$totalRows_panier)
    
    {
    
    $query_ligne_commande = sprintf("INSERT INTO shop_ligne_commande (commande, article, prix_ht, prix_ttc, quantite, total_ht, total_ttc, frais_port, `option`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) ",
    GetSQLValueString($row_commande['id'], "int"),
    GetSQLValueString($row_panier['article'], "int"),
    GetSQLValueString($row_panier['prix_ht'], "double"),
    GetSQLValueString($row_panier['prix_ttc'], "double"),
    GetSQLValueString($row_panier['quantite'], "int"),
    GetSQLValueString($row_panier['total_ht'], "double"),
    GetSQLValueString($row_panier['total_ttc'], "double"),
    GetSQLValueString($row_panier['frais_port'], "double"),
    GetSQLValueString($row_panier['option'], "text"));
    
    $query_produits= sprintf("UPDATE shop_produits SET stock_qty=stock_qty-%s  WHERE shop_produits.id=%s",
    GetSQLValueString($row_panier['quantite'], "int"),
    GetSQLValueString($row_panier['article'], "int"));
    
    
    mysql_select_db ($database_condom_local, $condom_local);
    $Result1 = mysql_query($query_ligne_commande, $condom_local) or die (mysql_error());
    $query_suppr_panier = sprintf("DELETE FROM shop_panier WHERE id= '%s'",
    GetSQLValueString($row_panier['id'], "int"));
    
       
    mysql_select_db($database_condom_local, $condom_local);
    $Result1 = mysql_query($query_suppr_panier, $condom_local) or die(mysql_error());
       
    $compteur = $compteur+1;

  7. #7
    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 : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Je ne vois pas l'accolade fermante de la boucle while dans ton dernier script.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Voilà cette fois c'est bon! Enfin, j'ai rajouté ceci et ça à l'air de fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     mysql_select_db($database_condom_local, $condom_local);
      $Result1 = mysql_query($query_produits, $condom_local) or die(mysql_error());
    Merci

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

Discussions similaires

  1. [PPT-2013] Mise à jour automatique des liaisons avec un fichier excel 2013
    Par Aby55 dans le forum Powerpoint
    Réponses: 1
    Dernier message: 08/04/2015, 13h48
  2. [XL-2010] Mise à jour automatique feuille stock
    Par fibule38 dans le forum Conception
    Réponses: 13
    Dernier message: 09/03/2015, 21h34
  3. Lier 2 tables avec mise à jour automatique
    Par Françoisguy dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/12/2007, 13h12
  4. Mise à jour automatique avec donnees d'une autre base
    Par mcdelay dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 16/11/2007, 09h50
  5. Réponses: 7
    Dernier message: 16/06/2007, 12h03

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