No sabeos si tu script de PHp tiene o no algo "raro", porque en este foro no tratamos los temas de PHP sino sólo SQL.
Lo qué si te podemos decir es que la consulta está bien escrita y no tiene errores de ningún tipo. El problema no es ese... El problema es que poner LIMIT junto con GROUP BY tiene a producir resultados erráticos inesperados.
Lo que tienes que tener en cuenta es:
- LIMIT es la última sentencia en aplicarse, pero se hace sobre el resultado como se esté devolviendo (
ver manual de referencia).
Cita: If you use LIMIT row_count with ORDER BY, MySQL ends the sorting as soon as it has found the first row_count rows of the sorted result, rather than sorting the entire result. (...) In either case, once the rows have been found, there is no need to sort any remainder of the result set, and MySQL does not do so
Lo que significa que:
Cita: Si utiliza row_count LIMIT con ORDER BY, MySQL termina el ordenamiento tan pronto como se ha encontrado la cantidad de filas indicadas en el LIMITde los resultados ordenados, en lugar de ordenar todo el resultado. (...) En cualquier caso, una vez que las filas se han encontrado, no hay necesidad de ordenar cualquier resto del conjunto de resultados, y MySQL no lo hace
En otras palabras, no ordena todo y busca el limite. Primero busca el límite y luego ordena lo encontrado.
Para que la consulta de el resultado que tu esperas, deberás transformarla en una subconsulta, y que el LIMIT esté en la exterior: