Hola,
Código:
select
a.post_id,
a.topic_id,
a.post_text,
a.post_subject
from phpbb_posts a
where
a.post_id =
(
select
b.post_id
from phpbb_posts b
where a.topic_id = b.topic_id
order by a.post_id
limit 1
);
Código:
POST_ID TOPIC_ID
1, 1, 'text', 'subject'
2, 1, 'text', 'subject'
3, 3, 'text', 'subject'
4, 2, 'text', 'subject'
5, 1, 'text', 'subject'
Primer registro :
* La consulta toma el primer registro el POST_ID : "1" y le transfiere el TOPIC_ID a la
subconsulta, en este caso TOPIC_ID : "1".
* La
subconsulta busca todos los registros que sean del mismo TOPIC_ID : "1", los ordena por POST_ID,
pero solamente devuelve el primero, en este caso devuelve POST_ID : "1".
* La consulta primaria comprueba que el POST_ID : "1" sea igual al devuelto por la subconsulta y si es así lo agrega al resultado.
Segundo registro :
* La consulta vuelve a hacer el mismo procedimiento pero ahora el POST_ID : "2", y tranfiere el TOPIC_ID que también es "1".
* La
subconsulta vuelve a hacer el mismo procedimiento y busca el mismo TOPIC_ID : "1" y de nuevo devuelve POST_ID : "1".
* La consulta primaria vuelve a comprobar el POST_ID pero ahora no coincide puesto que POST_ID : "2" y el primero de ese grupo es POST_ID : "1", así que no lo agrega al resultado.
Y así consecutivamente ...
Código:
POST_ID TOPIC_ID
1, 1, 'text', 'subject'
3, 3, 'text', 'subject'
4, 2, 'text', 'subject'
Es difícil explicarlo, lee la documentación de MySQL y algún tutorial de subconsultas 'correlated'.
Saludos,