2009-02-03 8 views
2

J'ai cette requête:simple problème SQL (MySQL)

SELECT page.id, revision.title, revision.number 
FROM page 
    INNER JOIN revision ON page.id = revision.pageId 

qui retournera quelque chose comme:

"1" "Page Version A" "1" 
"1" "Page Version B" "2" 
"1" "Page Version C" "3" 

Maintenant, je veux seulement retourner une ligne pour chaque page, avec les données de la dernière révision (avec le numéro le plus élevé). Si je fais:

SELECT page.id, revision.title, revision.number 
FROM page 
    INNER JOIN revision ON page.id = revision.pageId 
GROUP BY page.id 

Je reçois:

"1" "Page Version A" "1" 

Mais je veux:

"1" "Page Version C" "3" 

Toutes les idées? Merci.

Répondre

5

Ajouter une clause WHERE similaire à

OÙ revision.number = (select max (nombre) de la révision r où r.pageId = page.id)

+0

Génial, merci! :-) –

2

Si vous voulez juste pour sélectionner un seul enregistrement vous pouvez utiliser

par exemple 'LIMIT mot-clé MySQL (similaire à MSSQL 'TOP'):

SELECT page.id, revision.title, revision.number 
FROM page 
    INNER JOIN revision ON page.id = revision.pageId 

ORDER BY revision.number DESC 
LIMIT 0, 1 

Cela commander tous vos résultats, puis sélectionnez le meilleur résultat.

+0

aussi, celui de Rahul fonctionnerait aussi :) – Sophia

+0

J'ai besoin de plusieurs lignes, mais merci. –

+0

cette solution est plus rapide que celle de Rahul! – Ivan

-1
SELECT page.id, MAX(revision.number) 
FROM page 
INNER JOIN revision ON page.id = revision.pageId 
GROUP BY page.id 
+0

Cela ne sélectionnera que le maximum du numéro de révision, pas la dernière révision complète. –

0

Si cela est une question que vous exécuterez plusieurs fois, je considère faire une vue qui sélectionne la plus récente révision par pageid:

create view LatestRevision 
as 
Select pageid, max(number) from revision 

alors la requête serait

SELECT page.id, revision.title, revision.number 
FROM page 
    INNER JOIN revision ON page.id = revision.pageId 
    INNER JOIN LatestRevision on revision.pageid = LatestRevision.pageid and revision.Number = LatestRevision.number