Forum Programmation.SQL MySQL : problème de triggers

Posté par (page perso) .
Tags : aucun
0
1
août
2006
Salut à tous,

Voici mon problème : en MySQL 5.0, j'ai un trigger AFTER insert sur une table. Le but de ce trigger est d'insérer certaines infos du record dans une autre table. Le problème est que le nom de cette table n'est pas connue. Je dois aller rechercher l'info dans une autre table.
Je procède comme ceci :


CREATE TRIGGER insert_users AFTER INSERT ON users
FOR EACH ROW
BEGIN
DECLARE tablename CHAR(50);
SELECT SERVER_usertable INTO @tablename FROM servers WHERE SERVER_id = NEW.SERVER_id ;
INSERT INTO @tablename VALUES (NEW.USER_id, NEW.USER_email, NEW.USER_password);
END;


Cependant, cela ne fonctionne pas. Y a-t-il une solution ?
Je peux évidemment insérer une série de test sur le server.ID mais si j'ajoute un server, je devrais modifier le trigger.
Autre solution, le code (ici du PHP) se charge des deux inserts.

Merci d'avance.

Jy.
  • # subquery tu connais ?

    Posté par (page perso) . Évalué à 2.

    CREATE TRIGGER insert_users AFTER INSERT ON users
    FOR EACH ROW
    BEGIN
    INSERT INTO (SELECT SERVER_usertable FROM servers WHERE SERVER_id = NEW.SERVER_id) VALUES (NEW.USER_id, NEW.USER_email, NEW.USER_password);
    END;

    Ou un truc du style :
    CREATE TRIGGER insert_users AFTER INSERT ON users
    FOR EACH ROW
    BEGIN
    SET @tablename=(SELECT SERVER_usertable FROM servers WHERE SERVER_id = NEW.SERVER_id);
    INSERT INTO @tablename VALUES (NEW.USER_id, NEW.USER_email, NEW.USER_password);
    END;

    Je connais pas les trigger, mais en tout cas les subquery de ce type marchent :
    SET @a=(SELECT `id` FROM `table_id` WHERE `menu_id` = 1);
    SELECT @a;
    Résultat :
    1

    Bonne chance ;)
    • [^] # Re: subquery tu connais ?

      Posté par (page perso) . Évalué à 2.

      Heu, petit détail ;)

      Utilise := et pas = pour les affectations de variables sql (c'est plus mieux bien)

      Le commentaire sur lequel je me base :
      http://dev.mysql.com/doc/refman/5.1/en/select.html#c7715

      Bon tu as du Mysql 5.0, moi j'ai du 5.0.23 et ça marche donc ça devrait marcher même si la doc est noté en version 5.1 ;)
    • [^] # Re: subquery tu connais ?

      Posté par (page perso) . Évalué à 1.

      Merci pour ton aide. Oui, je connais les subqueries. Le problème, c'est que je n'ai pas trouvé un seul exemple ou la subqueries est au niveau du FROM ou du INTO, ou enore où le nom d'une table est dynamique. J'ai essayé ta solution, où mon trigger devient : CREATE TRIGGER insert_users AFTER INSERT ON users FOR EACH ROW INSERT INTO (SELECT SERVER_usertable FROM servers WHERE SERVER_id = NEW.SERVER_id) VALUES (NEW.USER_id, NEW.USER_email, NEW.USER_password, NEW.USER_nickname, NEW.USER_max_space, 0); Mais j'obtiens l'erreur : ERROR 1064 (42000) at line 138: 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 '(SELECT SERVER_usertable FROM servers WHERE SERVER_id = NEW.SERVER_id) VALUES (N' at line 3
      • [^] # Re: subquery tu connais ?

        Posté par (page perso) . Évalué à 1.

        ...je vais un peu vite. J'ai trouvé des exemples de subquery dans la clause FROM.
        Mais pas encore dans INTO.
        Bon, ça ne doit pas être fort différent, donc je vais revérifier la syntaxe de mon trigger.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.