il mio blog personale: foto, video…


Sto caricando i dati ...
Failed to load data!

264 MySQL: eseguire prima orderby e poi groupby

inserito da ligio il 26 Giugno 2008 alle 08:53
nella categoria informatica, sezione ,

Ieri mi sono scontrato con un problema abbastanza singolare nell’estrazione di alcuni dati da una tabella MySQL.
La tabella in quetione, chiamata “comments”, è così definita (elenco solo i campi necessari… cmq si tratta della tabella comments di Wordpress):

comment_ID(PK) | comment_post_ID(FK) | comment_date

comment_ID -> chiave primaria
comment_post_ID -> chiave esterna

La mia necessità era quella di estrarre i dati degli ultimi commenti approvati di 5 post differenti.
A prima vista la soluzione sembrava semplicissima:

$query = "SELECT * FROM comments WHERE comment_approved= '1' AND comment_type = '' GROUP BY comment_post_ID ORDER BY commenta_date DESC";

Ebbene, questa prima soluzione è SBAGLIATA! Infatti in questo modo viene eseguita prima la group by e solo successivamente l’order by! Servirebbe esattamente il contrario!

Ed ecco dunque la soluzione…

$query = "select * from comments A JOIN ( select comment_ID from comments where comment_approved= '1' AND comment_type = '' ORDER BY comment_date DESC) B ON A.comment_ID = B.comment_ID GROUP BY A.comment_post_ID ORDER BY A.comment_date DESC LIMIT 5";