Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pb de requête complexe utilisant INNER JOIN, INSERT et UPDAT

sql

    23 novembre 2010 à 11:59:56

    Salut à tous !

    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...

    Si quelqu'un pouvait éclaircir ma lanterne... :-°
    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2010 à 12:03:43

      Ben, t'essaies de faire 3 ou 4 requetes en une seule... Forcément ça passe pas.

      1/ Pas de jointures sur insert. Tu dois faire un insert par table

      2/ Tu dois séparer ton update de ton insert. Au mions par un ; puisque ce sont 2 requête différentes.
      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2010 à 12:07:09

        Salut,

        J'ai déplacé ce sujet dans la rubrique "Bases de données" du forum, plus appropriée. :)
        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2010 à 15:58:29

          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.
          • Partager sur Facebook
          • Partager sur Twitter
            23 novembre 2010 à 16:14:40

            Citation : Lord Casque Noir

            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.



            Tu peux exemplifier s'il te plait ?

            @Taguan : ok ;)

            @ShigeruM: ok, pas de souci :)
            • Partager sur Facebook
            • Partager sur Twitter
              23 novembre 2010 à 16:33:40

              Hé bien, tu veux insérer quoi ?

              É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
              
              • Partager sur Facebook
              • Partager sur Twitter

              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.
              • Editeur
              • Markdown