Partage
  • Partager sur Facebook
  • Partager sur Twitter

"boucle" en SQL

Sujet résolu
    10 décembre 2011 à 15:57:01

    Bonjour,

    Je viens poser un petit problème sur MySQL.
    Alors voilà, j'ai un forum avec des tables comme ceci (j'ai simplifié et rajouté des exemples de données pour ca soit clair) :

    forum_topic :
    topic_id topic_titre topic_nb_messages
    1 "boucle" en SQL 0
    2 Cherche idee cadeau ? 0
    7 Nouveautes du HTML 5 1
    11 Vive Zozor ! 3



    forum_post :
    post_id post_topic_id post_message
    1 7 Test de message
    2 11 Test de message
    3 11 Test de message
    4 11 Test de message



    Vous voyez qu'il y a un champ dont on peut "se passer" : topic_nb_messages, car on aurait pu calculer cette valeur à chaque fois qu'on en a besoin facilement. Si j'ai décidé de faire un champ, c'est pour limiter les requêtes pour pas que les pages se chargent trop lentement.

    Seulement voilà, j'aimerais faire un "système" en PHP/SQL qui va recalculer le nb de messages de chaque topic quand on l'active.

    Au début, j'avais pensé faire une boucle en PHP et une requête par topic, mais ça serait pas du tout optimisé... Quelqu'un a une idée ?

    Autrement dit, je souhaite faire cette requête (ci-dessous) pour tous les topics au lieu du topic à l'id 7 :
    UPDATE forum_topic SET topic_nb_messages = (SELECT COUNT(*) FROM forum_post WHERE forum_topic_id = 1) WHERE topic_id = 1
    



    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      10 décembre 2011 à 16:18:21

      Ben c'est tout bête :

      UPDATE forum_topic as FT
      SET topic_nb_messages =
      (SELECT COUNT(*) FROM forum_post WHERE FT.topic_id = forum_topic_id)
      


      Pis pour mettre à jour à jour le nb de messages à chaque ajout/supression regarde du côte de ON INSERT / DELETE
      • Partager sur Facebook
      • Partager sur Twitter
        10 décembre 2011 à 17:32:02

        Il suffit de mettre un trigger sur la table posts qui ajoute ou enlève 1 au nombre de posts dans le topic quand un post est inséré/supprimé. Il n'y a surtout pas besoin de count().
        • Partager sur Facebook
        • Partager sur Twitter
          21 décembre 2011 à 11:47:29

          Merci pour vos réponses,
          Je connaissais pas les triggers, je vais me renseigner là-dessus. :)
          • Partager sur Facebook
          • Partager sur Twitter

          "boucle" en SQL

          × 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