Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/02/2009, 10:18
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años, 1 mes
Puntos: 260
Sonrisa Respuesta: Consulta SELECT distiguiendo un campo

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,