Partage
  • Partager sur Facebook
  • Partager sur Twitter

récuperer les eléments ordonnés d'une BD

    21 mars 2023 à 19:49:18

    Bonjour, je voudrais savoir si on pouvais récupérer en sortir de requête SQL des éléments ordonnées en fonction d'une "fonction" php ou autre méthode permettant cela.

    Ex BD:

    Table 1 : utilisateurs  

    champ 1: id

    champ ... : informations utilisateurs 

     ______________

    Table 2 : publications

    champ 1: id

    champ ... : informations publications

    ______________

    Table 3 : commentaires

    champ 1: id

    champ 2 : id publication commenter

    champ ... : informations commentaires(date...)

    _______________

    Table 4 : like

    champ 1: id

    champ 2 : id commentaires liké

    champ ... : informations like(date...)

    L'objectif est d'obtenir un classement des utilisateurs ayant été les meilleurs commentateurs(plus de likes) par publications.

    J'aurais pu faire une simple requête puis mettre les listes de chaque tables dans une fonction simple de php qui me le fera mais j'aimerais éviter de "surgaché" une variable avec un trop gros volume de données, j'ai peur que ça pose des problèmes de saturation de mémoire ou autre et que cela empêche la bonne exécution du code.

    Merci d'avance votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      21 mars 2023 à 21:58:27

      Salut

      Je pense que compter les likes faits par utilisateur puis trier par ce nombre devrait être ce que tu souhaites ? Quelque chose comme ci-après.

      SELECT … FROM utilisateur LEFT JOIN like ORDER BY count(like.id)

      Il me semble même me souvenir que pour obtenir la position d'un utilisateur dans un classement sans devoir récupérer tous les autres avant revient à compter tous les utilisateurs qui ont plus de likes que lui et d'ajouter 1 à ce nombre. Il y a un vieux sujet sur ce forum qui doit en parler…

      • Partager sur Facebook
      • Partager sur Twitter
        22 mars 2023 à 0:23:45

        Cette requête classe les utilisateurs en fonctions de leurs nombres de likes total alors que moi je veux les utilisateurs qui ont eu le plus de likes par publications mais en fonctions des autres commentaires de la publications en question. c'est un peu compliquer à comprendre j'vais essayer de faire un exemple.

        Ex :

        Publication 1-> utilisateur 1 -> commentaire = 10 likes; nombre de like du commentaire le plus liké = 10.

        Publication 2-> utilisateur 2 -> commentaire  = 100 likes; nombre de like du commentaire le plus liké = 500.

        L'utilisateurs qui doit apparaître en premier dans la liste n'est pas le 2ème utilisateurs qui à 100 like (mais pas le plus liké de la publication) mais le 1er qui n'a "que" 10 likes mais est le plus liké de la publications.

        Je ne sais pas si c'est plus compréhensible avec ça.

        • Partager sur Facebook
        • Partager sur Twitter
          22 mars 2023 à 0:35:58

          Alors on peut ajouter des contraintes sur le maximum de likes.

          Par contre, je pense que ce sujet aurait plus sa place dans le forum des bases de données, je signale pour qu'il y soit déplacé.

          Et je te conseille de changer le titre, car celui actuel n'est pas suffisamment clair à mon avis.

          -
          Edité par Ymox 22 mars 2023 à 0:36:53

          • Partager sur Facebook
          • Partager sur Twitter
            22 mars 2023 à 3:21:21

            Bonjour,

            Déplacement vers un forum plus approprié

            Le sujet est déplacé de la section PHP vers la section Base de données

            • Partager sur Facebook
            • Partager sur Twitter
              22 mars 2023 à 9:27:21

              J'étais en train de faire la requête puis j'ai eu l'impression qu'il y a un manque dans ton modèle de données par rapport a ce que tu souhaites.

              Tu veux faire un classement des utilisateurs qui ont la plus hautes moyennes de like par commentaires. Le soucis, c'est que tu fais le lien de cette facon : commentaire -> publication -> utilisateur.

              Elle est ou l'info qui lie le commentaire à l'utilisateur ? Ton seul lien qui va de commentaire à utilisateur passe par la publication, donc jamais tu ne sais qui a fait le commentaire, tu sais juste qui a fait la publication ou les commentaires apparaissent.

              En l'état, si tu n'as pas d'id_utilisateur dans ta table commentaire, c'est impossible à faire. Si tu rajoutes un champ id_utilisateur dans la table commentaire, alors :

              SELECT 
              	u.id,
              	AVG(nb_like_com) as avg_like
              FROM utilisateur u
              INNER JOIN 
              	(SELECT --Requete qui donne le nombre de like à chaque comm
              		count(*) as nb_like_com, --vaudra 1 et non 0 si aucun like a cause du left join
              		com.id,
              		com.id_utilisateur
              	FROM commentaires com
              	LEFT JOIN like li --left join pour ne pas perdre le com si pas de like
              		ON li.id_com = com.id
              	GROUP by
              		com.id,
              		com.id_utilisateur) like_com
              	ON u.id = like_com.id_utilisateur
              ORDER BY avg_like desc

              Je l'ai pas testé, mais c'est pour donner une idée.
              EDIT : après relecture du sujet, je me dis que j'ai peut etre mal compris. j'ai pas capté si tu veux faire le classement des utilisateurs qui ont fait les meilleurs commentaires ou les meilleurs publications. Tu dis un peu les 2 dans tes messages. Et si ton 2e message dit clairement que tu veux faire un classement via les publications qui ont le + de like grace aux comm, mais je vois tellement pas la logique que je me dis que j'ai pas compris.

              Dans ma logique, ce sont les likes par commentaire qui sont intéressants.

              Dans tous les cas, si j'ai mal capté, tu peux toujours te servir de ma requête et l'adapter en rajoutant une jointure quelque part dans ma sous-requete pour faire le lien que tu veux.

              -
              Edité par Tiffado 22 mars 2023 à 9:37:22

              • Partager sur Facebook
              • Partager sur Twitter

              récuperer les eléments ordonnés d'une BD

              × 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