mysql: Comment INNER JOIN une table, mais limiter la jointure à 1 résultat avec le plus grand nombre de votes ou le plus grand nombre?

StackOverflow https://stackoverflow.com/questions/1425894

  •  07-07-2019
  •  | 
  •  

Question

J'ai 2 tables. L’un concerne les articles et l’autre les votes pour ces articles.

Items table has: |item_id|name|post_date
Votes table has: |votes_id|item_id|answer|total_yes|total_no

Ce que je veux faire, c'est afficher tous les éléments en fonction de post_date et afficher la réponse dans le tableau des votes avec le plus haut total_yes. Je souhaite donc uniquement afficher une seule réponse de la table des votes avec le total de votes total_yes le plus élevé.

J'essayais:

SELECT a.*, b.* FROM Items a
INNER JOIN Votes b ON a.item_id = b.item_id
GROUP by a.item_id
ORDER by a.post_date DESC, b.total_yes DESC

Mais ça ne marche pas.

Le résultat que j'aimerais voir est le suivant:

<item><answer><yes votes>
Buick | Fastest | 2 yes votes
Mercedes | Shiny | 32 yes votes
Honda | Quick | 39 yes votes

Toute aide est appréciée!

Était-ce utile?

La solution

SELECT a.*, b.*
  FROM Items a
       LEFT JOIN Votes b on a.item_id = b.item_id
                         and b.total_yes = (select max(total_yes) 
                                              from Votes v 
                         where v.item_id = a.item_id)
ORDER BY a.post_date DESC, b.total_yes DESC

NB: si vous avez pour un élément 2 réponses avec le même total_yes = max, vous aurez 2 lignes pour cet élément.

Autres conseils

ajoutez LIMIT 1 à la fin de votre requête:)

Cela ne prendra qu’un seul enregistrement, mais pour le moment, vous commandez d’abord par date, donc vous obtiendrez le vote le plus élevé pour la dernière date à laquelle vous avez voté. Est-ce ce que vous voulez?

Si vous souhaitez obtenir le nombre total de votes le plus élevé, vous devrez quand même commander par ordre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top