Petite requête SQL afin de calculer un score, please help ! :)

Bonjour,

j'ai un site internet ou je dois faire un scoring afin de trier des professeurs par nombre d'avis... Actuellement j'ai la requête ci-dessous mais elle ne me convient pas car elle ne tient pas compte des cas ou le professeur a plusieurs avis à son actif... Grade = 1 ou 0 selon avis positif ou négatif. En gros si le professeur a deux avis positifs et un négatif je veux que son score soit de 10 (5*1 + 5*1 + 5*0). Vous pouvez m'aider à tout hasard ?

Merci d'avance ! :)

Mathieu

UPDATE listings, testimonials SET listings.score_reviews = 5 * testimonials.grade  WHERE listings.author_id = testimonials.receiver_id;

1 réponse

  1. Modérateur
    Bonjour,
    Regarde donc ce que fait
    SELECT T.receiver_id 
          ,SUM(T.grade) * 5  as score
    FROM testimonials T
    GROUP BY T.receiver_id
    

    0
    1. Merci Jordane, j'ai que des 5 ou des 0 mais pour le moment aucun prof n'a deux commentaires lol
      0
    2. UPDATE listings, testimonials SET listings.score_reviews = 5 * SUM(testimonials.grade) WHERE listings.author_id = testimonials.receiver_id;


      Pour toi ceci marchera ou non ?
      0
    3. Modérateur
      @matmat8888pour moi.. non ça ne marchera pas....
      Le SUM s'utilise avec un GROUP BY
      De plus.. faire un UPDATE avec une jointure... pas certain que ça fonctionne correctement...
      Moi je serais toi j'essaierai plutôt avec une sous requête...

      Mais bon... de toutes façons... stocker ce calcul dans une table est, je pense, une aération.
      Surtout que le calcul (tel que je te l'ai montré) peut se faire à la volée lorsque tu en as besoin.... quel est l’intérêt dans ce cas de vouloir le stocker dans un champ.
      Beacoup de débutants pensent comme toi à stocker les résultat de calculs dans des champs d'une table... pour des calculs complexes qui prennent plusieurs secondes ou minutes... à se faire je veux bien..... (et dans ce cas je passe par des procédure stockées )... mais pour des calculs aussi basiques.. ben.. je ne comprend pas.
      0
    4. @jordane45Merci Jordane, au fait mon update / jointure marche parfaitement... Du coup tu penses que cela marchera ?

      UPDATE listings, testimonials SET listings.score_reviews = 5 * SUM(testimonials.grade) GROUP BY testimonials.receiver_id WHERE listings.author_id = testimonials.receiver_id;
      0
    5. Modérateur
      @matmat8888Tu testes... et tu verras....
      0