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

traer 1 sola fila en vez de dos

Estas en el tema de traer 1 sola fila en vez de dos en el foro de Mysql en Foros del Web. hola, me interesaria poder traer una sola fila en vez de dos, me explico, estoy haciendo una consulta con varios tablas y debo traer los ...
  #1 (permalink)  
Antiguo 28/02/2011, 18:49
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 11 meses
Puntos: 0
traer 1 sola fila en vez de dos

hola, me interesaria poder traer una sola fila en vez de dos, me explico, estoy haciendo una consulta con varios tablas y debo traer los datos de usuarios, pero por ejemplo, los telefonos tienen su tabla y basicamente es
id telefono
id_usaurios
id_numero_de_telefono
id_tipo de telefono (2- celular/ 5 -fijo)

el problema es que al hacer la consulta me vienen dos registros por cada id de usuario y no se bien como manejarlo ya que lueog debo iterar para hacer otras consultas, mi idea era que todo viniera en un solo registro y quizas concatenando el id del numero con el tipo.
se comprende?
agardeceria mucho me dieran alguna idea, saludos!
  #2 (permalink)  
Antiguo 01/03/2011, 02:20
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: traer 1 sola fila en vez de dos

Código SQL:
Ver original
  1. SELECT id_telefono, id_usuario
  2. FROM telefonos
  3. GROUP BY id_telefono, id_usuario

Sería así, aunque para saber exactamente que quieres podrías poner un ejemplo de lo que tienes, lo que sale y lo que quieres porque no se si id_teléfono es único (en cuyo caso la consulta anterior no valdría)
  #3 (permalink)  
Antiguo 01/03/2011, 07:35
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: traer 1 sola fila en vez de dos

Hola tico74:

Creo que la función GROUP_CONCAT es lo que estás buscando, te explico más o menos como funciona. Supongamos que tienes una tabla más o menos así:

Código:
id_telefono|id_usuario|id_tipo_de_telefono|numero
--------------------------------------
1|1|2|123-456-789
2|1|5|555-123-456
3|2|2|999-987-654
4|2|5|123-212-321
puedes hacer lo siguiente_

Código MySQL:
Ver original
  1. select id_usuario, GROUP_CONCAT(numero) telefonos
  2. from TuTabla
  3. group by id_usuario

Esto te regresa lo siguiente:

Código:
id_usuario|telefonos
----------------------------------
1|123-456-789,555-123-456
2|999-987-654,123-212-321
Es decir, para cada usuario concatena sus registros poniendo una coma entre cada uno de ellos.

Haz la prueba y nos comentas.

Saludos
Leo.
  #4 (permalink)  
Antiguo 01/03/2011, 09:38
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 11 meses
Puntos: 0
Respuesta: traer 1 sola fila en vez de dos

gracias amigos, no saben como valoro el tiempo que me ayudan , tratare de probar eso que me dicen, aca igual les copio la consulta que venia haciendo, espero no los maree mas:

SELECT Membresias.uid, Membresias.member, Miembros.full_name, Miembros.email,
Membresias.status,
Miembros.created_date, Miembros.uid AS Miembros_uid, Miembros.email, Membresias.expiration_date , telefonosTabla.numero AS numeroTelefono, telefonosTabla.tipo AS tipoTelefono, YEAR(CURDATE())-YEAR(Miembros.birth_date) + IF(DATE_FORMAT(CURDATE(),'%m-%d') > DATE_FORMAT(Miembros.birth_date,'%m-%d'), 0, -1) AS edad
FROM membership AS Membresias
INNER JOIN member AS Miembros ON Miembros.uid = Membresias.member
INNER JOIN phone_number AS telefonosTabla ON Miembros.uid = telefonosTabla.dueño
WHERE Membresias.status = 4
AND DATE_SUB(CURDATE(),INTERVAL 30 DAY) = Membresias.expiration_date
ORDER BY Membresias.expiration_date DESC

saludos!
  #5 (permalink)  
Antiguo 22/08/2012, 16:00
 
Fecha de Ingreso: marzo-2005
Mensajes: 5
Antigüedad: 19 años, 7 meses
Puntos: 0
Respuesta: traer 1 sola fila en vez de dos

No conocia la funcion GROUP_CONCAT , excelente, muchas gracias
  #6 (permalink)  
Antiguo 24/08/2012, 04:59
Usuario no validado
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años, 7 meses
Puntos: 16
Respuesta: traer 1 sola fila en vez de dos

GROUP_CONCAT...

Guau...

Excelente dato.

Etiquetas: dos, fila
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 16:06.