Hi everybody !
Je me suis récemment lancé dans le MySQL procédural pour mon site web (car n'ayant pas remarqué auparavant que les nouvelles versions du serveur le permettaient).
J'ai donc créé de nombreux triggers, procédures et fonctions en espérant gagner ainsi en terme de performances.
Parmi les trigger, un en particulier me pose problème... Je m'explique :
Les utilisateurs de mon site peuvent créer des "sorties" (loisirs, etc. c'est pour une asso). Lorsque la sortie est créée, un trigger s'occupe de :
- Créer une galerie d'image pour cette sortie
- Créer un post sur le forum
- Lier la sortie, le post et la galerie au groupe correspondant (asso composée de plusieurs groupes situés dans des villes différentes)
- Remplir la table "aConsulter", table que j'utilise pour avertir les utilisateurs qu'il y a de nouvelles données à lire
Voici donc ce que ça donne :
Le problème, comme certains l'auront sûrement remarqué, c'est qu'on ne peut pas modifier la valeur de NEW dans un trigger AFTER INSERT. On ne le peut que dans un BEFORE INSERT. Seulement, moi j'ai besoin de l'ID de l'autoincrément de l'enregistrement dans la table "rencontres", chose que je n'obtiendrai pas dans un BEFORE INSERT... :aie:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 CREATE TRIGGER `ajouterRencontre` AFTER INSERT ON `rencontres` FOR EACH ROW BEGIN //Lie la rencontre au groupe insert into etreConcerne values (NEW.idGroupe,NEW.id); //Créé le post et le lie au groupe SELECT rencontres INTO @idForum FROM forums WHERE idGroupe=NEW.idGroupe AND rencontres=1; insert into posts values (0,NEW.idGroupe,NEW.titre,NEW.idUser,NEW.ip,0,@idForum,0,NEW.dateHeure,NEW.dateHeureFin,0,0,0,NEW.descriptif,0,NEW.type,1,0,0,'',0); SET @idPost=last_insert_id(); UPDATE rencontres SET idPost=@idPost WHERE id=NEW.id; INSERT INTO etreAuteur values (NEW.idGroupe,@idPost); //Créé la galerie INSERT INTO galeries values (0,NEW.idGroupe,NEW.titre,NEW.idUser,NEW.dateHeure,'',0,0,NEW.id,0); SET @idGalerie=last_insert_id(); INSERT INTO etreProprietaire values (NEW.idGroupe,@idGalerie); //Créé les occurences dans la table "aConsulter" INSERT INTO aConsulter SELECT 'rencontre',users.id,NEW.id,@idForum,NEW.dateHeure from users where not(users.id=NEW.idUser); INSERT INTO aConsulter SELECT 'forum',users.id,@idPost,@idForum,NEW.dateHeure from users where not(users.id=NEW.idUser); END
J'ai bien entendu pensé à une fonction mais il se peut que des sorties soient ajoutées à même la base de données et dans ce cas là, la fonction ne sera pas utilisée...
Est-ce que quelqu'un a une idée pour résoudre mon problème ?
Merci d'avance :hola: