2009-08-10 8 views
0

Ich verwende mysqlwie diese SQL schreiben

gibt es zwei Tabellen

Abstimmung

app_id user_id 
2  1 
3  1 
2  2 

App

id title content 
1 xx xxxx 
2 yy yyyy 
3 zz zzzz 

Ich möchte App sortieren Tabelle nach der Anzahl der User-Votes. In diesem Beispiel sollte das Ergebnis

id title content 
2 yy yyyy 
3 zz zzzz 
1 xx xxxx 

irgendein Vorschlag sein?

Antwort

3
select app.id, app.title, count(*) as votes 
from app 
left join vote on app.id = vote.app_id 
group by app.id, app.title 
order by votes desc 

Wenn Sie nicht über die Anzahl der Stimmen, die in der Ausgabe haben möchten, können Sie dies auch tun (in SQL Server ist es möglich, so dass ich glaube, es sollte auch in mySql möglich sein, aber ich habe es nicht getestet, da ich hier kein MySQL habe).

select app.id, app.title 
from app 
left join vote on app.id = vote.app_id 
group by app.id, app.title 
order by count(*) desc 
+0

ja, es funktioniert in mysql – limboy

+0

Da Sie einen inneren Join verwenden, wird die Anwendung "xx", die keine Votes hat, nicht zurückgegeben. – Guffa

+0

hat den inneren Join zu einem linken Join geändert. –

2

Gruppe auf den Daten aus der App Tabelle eine Anzahl der Stimmen, zu erhalten und ein LEFT JOIN auf der Abstimmung Tabelle auch die Anwendungen ohne Stimmen zu bekommen verwenden:

select app.id, app.title, app.content 
from app 
left join vote on vote.app_id = app.id 
group by app.id, app.title, app.content 
order by count(vote.app_id) desc