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

subquery que retorna un array

Estas en el tema de subquery que retorna un array en el foro de Mysql en Foros del Web. Saludos amigos, Please, una ayudita con una query antes de que mi cabeza explote. Tengo como ejemplo, las siguientes 3 tablas: Código: TABLA users - ...
  #1 (permalink)  
Antiguo 23/10/2009, 14:01
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 4 meses
Puntos: 0
Pregunta subquery que retorna un array

Saludos amigos,

Please, una ayudita con una query antes de que mi cabeza explote.
Tengo como ejemplo, las siguientes 3 tablas:

Código:
TABLA users
- iduser (bigint)
- username (varchar(50))

TABLA jobs
- idjob (bigint)
- jobname (varchar(50))
- userid (bigint)
Un usuario puede tener varios empleos.
Lo que necesito obtener en una query es la información del usuario y el ID de los empleos a los que está subscrito.
Algo así:
[iduser1, username1, idjob1, idjob3]
[iduser2, username2, idjob2, idjob3, idjob8]
[iduser3, username3, idjob5]

Si intento algo así:
SELECT u . * , (SELECT `idjob` FROM `jobs` WHERE `userid` = u.`iduser`) AS idjob FROM `users` u WHERE...

Como es lógico recibo el error:
#1242 - Subquery returns more than 1 row

Saludos y gracias por el apoyo,
Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #2 (permalink)  
Antiguo 23/10/2009, 14:36
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: subquery que retorna un array

En este caso no es necesario un subquery. Puedes usar JOIN para unir ambas tablas; luego, puedes agrupar los trabajos (GROUP BY) y para mostrar todos usar GROUP_CONCAT.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 23/10/2009, 16:01
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: subquery que retorna un array

Hola David,

Gracias por tu respuesta.

La siguiente query:
Código:
SELECT u.*, j.`idjob` 
FROM `users` u  
LEFT JOIN `jobs` j ON (j.`userid` = u.`iduser`) 
WHERE u.`active` = 1 AND u.`usertypeid`=6  
GROUP_CONCAT (j.`idjob`)
GROUP BY u.`iduser`; 
Pero me da el error:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP_CONCAT (j.`idjob`) GROUP BY u.`iduser`
¿Qué estoy poniendo mal, por favor?
Saludos!!!

Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #4 (permalink)  
Antiguo 23/10/2009, 16:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: subquery que retorna un array

GROUP_CONCAT() no es una cláusula de SELECT, por lo tanto no funciona en ese contexto. Es una función de agregación y opera sobre el SELECT, al igual que otras:
Código sql:
Ver original
  1. SELECT u.*, GROUP_CONCAT (j.`idjob`) idjob
  2. FROM `users` u  
  3. LEFT JOIN `jobs` j ON j.`userid` = u.`iduser`
  4. WHERE u.`active` = 1 AND u.`usertypeid`=6  
  5. GROUP BY u.`iduser`;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 23/10/2009, 17:13
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: subquery que retorna un array

No me lo acepta en esa posición.

Código:
SELECT u.*, GROUP_CONCAT (j.`idjob`) AS idjob
FROM `users` u  
LEFT JOIN `jobs` j ON (j.`userid` = u.`iduser`)
WHERE u.`active` = 1 AND u.`usertypeid`=6  
GROUP BY u.`iduser`;
#1305 - FUNCTION mydb.GROUP_CONCAT does not exist
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #6 (permalink)  
Antiguo 23/10/2009, 18:25
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: subquery que retorna un array

Resuelto!
El error está en el espacio después de GROUP_CONCAT... debe ponerse junto GROUP_CONCAT y los (), a no ser que se configure el SQL con el modo IGNORE_SPACE.

Saludos!
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
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 02:19.