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";

