Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta SELECT distiguiendo un campo

Estas en el tema de Consulta SELECT distiguiendo un campo en el foro de Mysql en Foros del Web. Buenas, soy nuevo por aqui, os traigo una pregunta, como podría hacer un select de un tabla donde no quiero que se repitan valores del ...
  #1 (permalink)  
Antiguo 02/02/2009, 21:35
 
Fecha de Ingreso: febrero-2009
Mensajes: 8
Antigüedad: 15 años, 3 meses
Puntos: 0
Pregunta Consulta SELECT distiguiendo un campo

Buenas, soy nuevo por aqui, os traigo una pregunta, como podría hacer un select de un tabla donde no quiero que se repitan valores del campo 1? me explico

campo 0 - campo 1 - campo 2 - campo 3 - campo 4
0 - 1 - 232 - 323 - 222
1 - 1 - 112 - 112 - 311
2 - 2 - 232 - 433 - 222


El campo 0 es autoincrementable y sacaría el registro que primero se añadió a la tabla, es decir el del número mas bajo del campo 0, El resultado debería ser:


0 - 1 - 232 - 323 - 222
2 - 2 - 232 - 433 - 222

eliminando la segunda fila debido a que el campo se repite y es el de mayor valor en campo 0.


Espero que alguien pueda ayudarme porque ando desesperado ya!
  #2 (permalink)  
Antiguo 02/02/2009, 23:02
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Consulta SELECT distiguiendo un campo

Hola,

Hay que usar una sub consulta,
(correlated)

- Primero extraer solamente el 'campo1' de cada fila, el resultado ordenado por el 'campo1' y limitada a 1 registro.
- Después con una consulta normal se extraen solamente las filas que el 'campo1' coincida con la clausula anterior.
- Por último (correlated) el resultado del paso1 'coincide' con el resultado del paso2 por la clausula where en azul.

(Creo que está mejor explicado en http://dev.mysql.com/doc/ )

Sería algo así :

Código:
select
	a.campo1,
	a.campo2,
	a.campo3,
	a.campo4,
	a.campo5
from test a
where
	a.campo1 =
	(
		select
		b.campo1
		from test b
		where a.campo2 = b.campo2
		order by a.campo1
		limit 1
	);
Saludos,

ps:

Si le pones nombres reales a los campos se te va a hacer más fácil entenderlo.
  #3 (permalink)  
Antiguo 03/02/2009, 07:40
 
Fecha de Ingreso: febrero-2009
Mensajes: 8
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Consulta SELECT distiguiendo un campo

La verdad es que no entiendo bien lo de a.campo y lo de test, mira mi tabla se llama phpbb_posts y los campos son:

post_id - topic_id - post_text - post_subject


el campo que se repite varias veces es el topic_id y del cual solo querria sacar la primera fila que tenga ese campo igual, es decir:

TABLA PHPBB_POSTS

post_id - topic_id - post_text - post_subject

1 - 1 - hola que tal - saludo
2 - 1 - buenas pedro - cordial
3 - 2 - ejejeje - risas
4 - 2 - jojo - risas2

tendria que darme:

1 - 1 - hola que tal - saludo
3 - 2 - jejeje - risas


A ver si me pudieras decir como porque la verdad no me queda muy clara sobretodo por el tema de a.campo y lo de test.
  #4 (permalink)  
Antiguo 03/02/2009, 10:18
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
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,
  #5 (permalink)  
Antiguo 03/02/2009, 11:35
 
Fecha de Ingreso: febrero-2009
Mensajes: 8
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Consulta SELECT distiguiendo un campo

muchas gracias, voy a releerlo detenidamente varias veces porque la verdad es que es algo dificil de entender, muchas gracias por la ayuda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:39.