2009-08-10 14 views
0

J'utilise MySQLcomment écrire ce sql

il y a deux tables

vote

app_id user_id 
2  1 
3  1 
2  2 

app

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

Je veux trier app tableau par le nombre de votes de l'utilisateur. dans cet exemple, le résultat devrait être

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

une suggestion?

Répondre

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 

Lorsque vous ne voulez pas avoir le nombre de voix dans la sortie, vous pouvez le faire aussi bien (dans le serveur SQL, il est possible, alors je crois qu'il devrait être possible dans mySql aussi bien, mais je Je ne l'ai pas testé car je n'ai pas de MySQL ici).

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

oui, cela fonctionne dans mysql – limboy

+0

Comme vous utilisez une jointure interne, il ne retournera pas l'application "xx" qui n'a pas de votes. – Guffa

+0

modifié la jointure interne à une jointure gauche. –

2

Groupe sur les données de la table d'application pour obtenir un décompte des voix, et d'utiliser une jointure gauche sur la table de vote pour obtenir également les applications sans voix:

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 
Questions connexes