J'ai une requête assez complexe à réaliser sur 3 tables : notifications, following_redac et notify.
Avant de vous exposer mon problème, voici la structure de mes tables :
notifications
Champ
Type
Auto
Primaire
id_notif
int(11)
Oui
Oui
id_membre
int(11)
-
-
notification
text
-
-
date_notification
datetime
-
-
following_redac
Champ
Type
Auto
Primaire
redacteur
varchar(50)
-
Oui
id_follower
int(11)
-
Oui
notify
Champ
Type
Auto
Primaire
id_membre
int(11)
-
Oui
nb_messages
int(11)
-
-
nb_notifications
int(11)
-
-
nb_events
int(11)
-
-
nb_followers
int(11)
-
-
nb_basket
int(11)
-
-
La table following_redac répertorie tous les membres qui souhaitent être avertis d'une nouvelle publication d'un rédacteur x.
La table notifications leur envoie cette notification sur leur page notifications.php.
La table notify met à jour le nombre de notifications dans leur menu perso.
Exemple :
- $Pseudo
- messages (1)
- notifications (2)
- déconnexion
Quand le responsable de la rédaction valide la publication de l'article du rédacteur x, l'article est donc publié, et tous les membres suivant ce rédacteur doivent être avertis.
J'ai donc tenté sans grand espoir cette requête :
INSERT INTO notifications (notifications.id_membre, notifications.notification, notifications.date_notification)
VALUES (following_redac.id_follower, :notification, NOW())
INNER JOIN following_redac
ON following_redac.id_follower=notifications.id_membre
INNER JOIN blog
ON following_redac.redacteur=:redacteur
WHERE blog.id_article=:id_article
UPDATE notify SET notify.nb_notifications = notify.nb_notifications + 1 WHERE notify.id_membre=following_redac.id_follower
Evidemment, WAMP me reproche une erreur dans la syntaxe de ma requête au niveau de "INNER JOIN following_redac ON following_redac.id_follower=notifications.id_membre".
J'ai beau chercher, je n'arrive pas à trouver LA solution
Je suis conscient que la structure de mes tables peut être optimisée, mais là aussi, je ne vois pas comment...
following_redac.redacteur devrait être un id de membre, pas un pseudo
La mise à jour des nombres de notifications se fait facilement avec un trigger sur notifications
Il te reste donc une requête qui est un INSERT INTO SELECT ; écris un SELECT qui retourne les lignes à insérer, teste-le, puis transforme le en INSERT INTO SELECT.
following_redac.redacteur devrait être un id de membre, pas un pseudo
La mise à jour des nombres de notifications se fait facilement avec un trigger sur notifications
Il te reste donc une requête qui est un INSERT INTO SELECT ; écris un SELECT qui retourne les lignes à insérer, teste-le, puis transforme le en INSERT INTO SELECT.
Écris un SELECT qui sort ce que tu veux insérer (avec les jointures, etc) teste-le dans phpmyadmin et poste-le.
Un truc du style
SELECT
id_follower,
:notification,
NOW()
FROM following_redac
WHERE redacteur=:redacteur
Pb de requête complexe utilisant INNER JOIN, INSERT et UPDAT
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Tutoriel complet MySQL !