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

SQL Procédural MySQL Discussion :

Utilisation des triggers


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Par défaut Utilisation des triggers
    Bonjour,

    je ne suis pas certain que l'utilisation des trigger résoudra mon problème, si ce n'est pas le cas, comment puis-je faire ?
    Le problème est que je dispose d'un table résumant des informations de joueur : pseudo, race, sexe, metier, ville de résidence... et une table de statistique sur les joueurs inscrits :
    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
     
    CREATE TABLE `ville_statistique` (
      `idVille` int(10) unsigned NOT NULL,
      `race_0` tinyint(3) unsigned NOT NULL default '0',
      `race_1` tinyint(3) unsigned NOT NULL default '0',
      `race_2` tinyint(3) unsigned NOT NULL default '0',
      `race_3` tinyint(3) unsigned NOT NULL default '0',
      `sexe_0` tinyint(3) unsigned NOT NULL default '0',
      `sexe_1` tinyint(3) unsigned NOT NULL default '0',
      `metier_A` tinyint(3) unsigned NOT NULL default '0',
      `metier_B` tinyint(3) unsigned NOT NULL default '0',
      `metier_C` tinyint(3) unsigned NOT NULL default '0',
      `metier_D` tinyint(3) unsigned NOT NULL default '0',
      `metier_E` tinyint(3) unsigned NOT NULL default '0',
      `total` tinyint(3) unsigned NOT NULL default '0',
      PRIMARY KEY  (`idVille`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='statistique de la population d''une ville';
    Pour chaque ville je désire connaitre la répartition exacte des joueurs entre les races, les sexes et les metiers.
    Mon idée était de mettre au point un trigger qui dès l'ajout d'un joueur dans la première table, met à jour la race, le sexe et le metier pour la ville désignée par idVille.

    J'espère avoir été assez claire et que vous pourrez m'aider.

  2. #2
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Oui c'est possible mais quel est ta question exactement ?

  3. #3
    Membre chevronné Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Par défaut
    Je ne vois pas trop comment faire mon trigger et surtout si ma table résultante est bien conçue.
    Je bloque sur la syntaxe du trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER tgr_statVille AFTER INSERT ON tbJoueur
    FOR EACH ROW
    BEGIN
      IF (NEW.idRace == 0) THEN tbStat.race_0 = tbStat.race_0 + 1 WHERE tbStat.idVille = NEW.idVille;
      ELSEIF (NEW.idRace == 1) THEN tbStat.race_1 = tbStat.race_1 + 1 WHERE tbStat.idVille = NEW.idVille;
      END IF;
    END
    Merci d'avance pour l'aide.

  4. #4
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Citation Envoyé par nounetmasque Voir le message
    Je ne vois pas trop comment faire mon trigger et surtout si ma table résultante est bien conçue.
    Je bloque sur la syntaxe du trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER tgr_statVille AFTER INSERT ON tbJoueur
    FOR EACH ROW
    BEGIN
      IF (NEW.idRace == 0) THEN tbStat.race_0 = tbStat.race_0 + 1 WHERE tbStat.idVille = NEW.idVille;
      ELSEIF (NEW.idRace == 1) THEN tbStat.race_1 = tbStat.race_1 + 1 WHERE tbStat.idVille = NEW.idVille;
      END IF;
    END
    Merci d'avance pour l'aide.
    Je t'avous que je vois pas trop ce que tu cherches à faire dans ta condition . Alors peut être qu'il y a des fonctionnalités de mysql que je connais pas mais le WHERE ne peut être utilisé dedans.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF (NEW.idRace = 0 AND old.idVille = NEW.idVille) THEN 
        new.race_0 = old.race_0 + 1; 
    ELSEIF (NEW.idRace = 1 AND old.idVille = NEW.idVille) THEN 
        new.race_1 = old.race_1 + 1;
    END IF;
    Il y a pas de == dans les conditions. La syntaxe de mysql est assez proche du vb

  5. #5
    Membre chevronné Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Par défaut
    Merci pour cette syntaxe mais selon la doc MySQL, le mot clé OLD ne peut pas être utilisé avec un INSERT :
    Dans un déclencheur INSERT, seul NEW.col_name peut être utilisée : il n'y a pas d'ancienne ligne.
    De plus je ne cherche pas à modifier la table sur laquelle porte le trigger (table dans laquelle je vais insérer une nouvelle ligne) mais une autre qui lui est liée. Je serai donc tenté d'utiliser la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF (NEW.idRace = 0 AND tbStat.idVille = NEW.idVille) THEN 
        tbStat.race_0 = tbStat.race_0 + 1; 
    ELSEIF (NEW.idRace = 1 AND tbStat.idVille = NEW.idVille) THEN 
        tbStat.race_1 = tbStat.race_1 + 1;
    END IF;

  6. #6
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Citation Envoyé par nounetmasque Voir le message
    Merci pour cette syntaxe mais selon la doc MySQL, le mot clé OLD ne peut pas être utilisé avec un INSERT :


    De plus je ne cherche pas à modifier la table sur laquelle porte le trigger (table dans laquelle je vais insérer une nouvelle ligne) mais une autre qui lui est liée. Je serai donc tenté d'utiliser la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF (NEW.idRace = 0 AND tbStat.idVille = NEW.idVille) THEN 
        tbStat.race_0 = tbStat.race_0 + 1; 
    ELSEIF (NEW.idRace = 1 AND tbStat.idVille = NEW.idVille) THEN 
        tbStat.race_1 = tbStat.race_1 + 1;
    END IF;
    Honte à moi en effet le old ne peut exister pour un insert.
    Tu peux faire des requêtes d'insert, update, select, delete dans un trigger sans problème.
    Par contre cette syntaxe pour atteindre une table je ne la connais pas.
    tbStat.race_0 WHERE ...
    Personnellement, j'utilise directement une requête d'update. Ma fois si ça marche ainsi pourquoi pas

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

Discussions similaires

  1. Utilisation des triggers sous C#
    Par Kev9723 dans le forum C#
    Réponses: 5
    Dernier message: 03/09/2010, 14h49
  2. Utilisation des triggers key-Fx
    Par fregolo52 dans le forum Forms
    Réponses: 2
    Dernier message: 21/10/2009, 09h02
  3. Réponses: 2
    Dernier message: 21/09/2009, 14h20
  4. utilisation des triggers
    Par bouleboule dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/07/2005, 17h47
  5. Delphi5 (IBX) - Interbase6.0 + Utilisation des triggers
    Par _Marsu_ dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/04/2004, 18h02

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