mysql: Wie INNER JOIN eine Tabelle, aber Grenze kommen zu 1 Ergebnis mit der höchsten Stimme oder zählen?

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

  •  07-07-2019
  •  | 
  •  

Frage

Ich habe 2 Tabellen. Eine davon ist Artikel und eine andere Stimmen für diese Elemente.

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

Was möchte ich tun, ist alle Elemente auf post_date basierend zeigen und die Antwort in der Stimmen-Tabelle mit den höchsten total_yes zeigen. Deshalb möchte ich mit der höchsten total_yes Abstimmung nur eine einzige Antwort der Stimmen Tabelle zeigen.

Ich habe versucht:

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

Aber das funktioniert nicht.

Das Ergebnis Ich mag würde, um zu sehen ist:

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

Jede Hilfe ist willkommen!

War es hilfreich?

Lösung

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

N. B .: Wenn Sie für einen Artikel haben 2 Antworten mit dem gleichen total_yes = max, Sie haben zwei Zeilen für dieses Element.

Andere Tipps

hinzufügen LIMIT 1 bis zum Ende der Anfrage:)

, die nur ein Datensatz nehmen, aber im Moment Sie das Datum zuerst sind Bestellung, so dass Sie die höchste Stimme bekommen für das letzte Datum, an gestimmt. Ist das, was Sie wollen?

Wenn Sie die höchste Gesamtabstimmung wollen unabhängig benötigen Sie von diesem ersten zu bestellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top