Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ordre de fréquence

Anonyme
    20 novembre 2010 à 23:14:41

    Bonjour,

    J'ai un petit problème en php, j'ai deux tables dans ma base de données, une "article", et l'autre "jaime". J'ai un système pour afficher le fait qu'on aime un article, (comme sur facebook, oui) et je voudrais afficher l'article qui a le plus de "j'aime".

    La table article contient un champ id (et d'autres champs inutiles).
    La table jaime contient un champ id un champ ip. Dans id je stocke l'id de l'article et dans ip l'ip de la personne qui a cliqué sur j'aime. Donc, il y a un enregistrement par j'aime.

    J'ai pensé à compter le nombre de j'aime pour chaque article, puis en ressortir celui qui en a le maximum, mais ce serait trop lourd à installer.

    Auriez vous une idée ? Une fonction sql magique :D ?

    D'avance merci,

    Can
    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2010 à 23:19:36

      une idée oui, rajouter un champ dans t'a première table de l'article avec le nombre de j'aime

      edit victor a mieux expliquer mon idée
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        20 novembre 2010 à 23:20:40

        Mais euh, très simple :
        tu gardes la structure de base de donnée que tu as actuellement mais en rajoutant un champ "jaime" dans la table "article".
        Quand quelqu'un "aime" un article, en plus d'ajoutant son IP et l'article "aimé" dans la table "jaime", tu incrémentes le champ "jaime" de l'article concerné.

        Très simple.
        • Partager sur Facebook
        • Partager sur Twitter
          20 novembre 2010 à 23:24:08

          Sa conception actuelle peut être lourde si le site a énormément de visiteurs, mais elle est bonne. Je ferais une requête du genre :

          SELECT A.id, COUNT(*) AS nbrLikes
          FROM articles A
          INNER JOIN jaime J
              USING (id)
          GROUP BY A.id
          ORDER BY nbrLikes DESC
          LIMIT 1;
          


          Note que cette question irait mieux dans le forum Base de données, je déplace, donc.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            20 novembre 2010 à 23:31:35

            Citation : Fayden

            Sa conception actuelle peut être lourde si le site a énormément de visiteurs, mais elle est bonne.


            Je ne suis pas tout à fait d'accord. On ne peut pas vraiment considérer que le champ comptant le nombre de 'jaime' est une info redondante, et surtout comme tu le dis, c'est très efficace niveau performance. :)

            Il est évident qu'il y aura énormément plus de personnes qui affichent la liste des articles qui ont le plus de "jaime" que de gens qui "jaime" un article.

            D'un côté on fait 2 requêtes rapides (un insert et un update), de l'autre on a une requête bien lourde 'simplement' pour de l'affichage, alors que le point critique niveau performance pour un site de ce genre c'est clairement l'affichage et pas l'insertion des données... non?
            • Partager sur Facebook
            • Partager sur Twitter
              20 novembre 2010 à 23:33:16

              C'est vrai. Il suffirait d'un trigger pour mettre à jour la colonne de la table articles.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                21 novembre 2010 à 0:09:45

                A ce propos, google n'est pas fichu de me donner une réponse plus récente que 2007, peut-être que quelqu'un sait et j'en profite rapidement :

                Est-ce que le moteur de stockage MyISAM gère les triggers et le views?

                [EDIT]

                Chwette, moult merci Fayden!
                • Partager sur Facebook
                • Partager sur Twitter
                  21 novembre 2010 à 0:17:44

                  Après tests, oui, ça fonctionne correctement.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Ordre de fréquence

                  × 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