Sorki za kiepski temat, ale nie sposób wymyślić coś sensownego.
Mam dwie tabele:
articles

id (PK)

article_versions

id (PK)
article_id (FK reference to articles.id)
modified (datetime)
published (0/1)

Aktualna wersja artukułu to ta, której published = 1 i modified jest największy ('najmłodszy').
Chciałbym teraz wybrać wszystkie articles, które mają opublikowaną wersję wraz z id wersji aktualnej i :

 SELECT Article.id,  ArticleVersion.modified, ArticleVersion.id from articles as Article
	              INNER JOIN article_versions as ArticleVersion 
	                 ON (Article.id = ArticleVersion.article_id AND ArticleVersion.published =1)
GROUP BY Article.id
ORDER BY ArticleVersion.modified DESC

Załóżmy, że mam article o id 54, które mają wersje 97, 98, 99. Jednak tak się składa, że article_version o id 99 jest aktualny. Niestety Inner join złączy te tabele tak:
54 97
54 98
54 99
a group_by wywali drugi i trzeci wiersz. Zatem zostaję z article_version 97, który nie jest prawidłowy.

Pewnie mogę to zrobić podając w inner join podzapytanie, w którym dam odpowiedni order by. Jednak chciałbym, żeby to zapytanie było jak najbardziej optymalne. Czy znacie jakiś sprytny sposób na to, żeby:
a) wywalić wiersze, których articles.id się dublują po wykonaniu sortowania
lub
b) zmusić JOINA, żeby łączył wiersze z drugiej tabeli w innej kolejności (pod warunkiem, że nie oznacza to sortowania całej tabeli article_version dla każdego wiersza articles)

A może za bardzo kombinuję? Czy może jak w INNER JOIN zastosują podzapytanie, to MySQL mi go wrzuci do CACHE i tak naprawdę wykona się tylko raz?

TIA