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 Raphaël G. (site web personnel) . Évalué à 2.
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 Raphaël G. (site web personnel) . Évalué à 2.
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 Jean-Yves Beaujean (site web personnel) . Évalué à 1.
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 Jean-Yves Beaujean (site web personnel) . Évalué à 1.
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 à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.