Foros del Web » Programando para Internet » PHP »

Problemas con IN() y SubSelec en MySql

Estas en el tema de Problemas con IN() y SubSelec en MySql en el foro de PHP en Foros del Web. Buenas foreros Tengo un problema con una consulta MySql la cual no me da errores pero no me hace una consulta correcta. Tengo una Marca, ...
  #1 (permalink)  
Antiguo 03/09/2015, 06:33
 
Fecha de Ingreso: mayo-2006
Mensajes: 71
Antigüedad: 13 años, 6 meses
Puntos: 0
Problemas con IN() y SubSelec en MySql

Buenas foreros

Tengo un problema con una consulta MySql la cual no me da errores pero no me hace una consulta correcta.

Tengo una Marca, por ejemplo Seat, con su id. Pero esa marca esta varias veces registrada en la columna por la pertenencia a varias categorias. Por ejemplo Seat que pertenece a la categoría 1, Seat que pertenece a la categoria 3 etc.

Hago esta consulta para que me concatene los ids obtenidos en el resultado.

Código:
SELECT GROUP_CONCAT(id_manufacturer) FROM manufacturer WHERE `name` LIKE '%SEAT%'
El resultado es este:

62,104,119,478,696,1256,1758

Mi intención es convertir la consulta anterior en una Subselect para poder introducir el resultado en un IN() de una consulta principal.

Código:
SELECT * FROM `vehicle` WHERE manufacturer_id_manufacturer IN((SELECT GROUP_CONCAT(id_manufacturer) FROM manufacturer WHERE `name` LIKE '%SEAT%'))
El problema que me da es que con resultado da solo los SEAT que pertenecen a la categoría 62, osea el primer numero del resultado.

¿Ha que puede ser debido este resultado ya que ?
  #2 (permalink)  
Antiguo 03/09/2015, 08:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Problemas con IN() y SubSelec en MySql

No confundas el uso de GRUP_CONCAT, que te devuelve una cadena de texto con una lista de valores, con la lista de valores que necesita el IN()
Código MySQL:
Ver original
  1. SELECT * FROM `vehicle`
  2. WHERE manufacturer_id_manufacturer
  3.     IN(SELECT id_manufacturer
  4.         FROM manufacturer
  5.     WHERE `name` LIKE '%SEAT%')

Para funcionar con GROUP_CONCAT() deberías usar otra función de cadena, pero no es eficiente:
Código MySQL:
Ver original
  1. SELECT * FROM `vehicle`
  2. WHERE FIND_IN_SET(manufacturer_id_manufacturer, (SELECT GROUP_CONCAT(id_manufacturer) FROM manufacturer WHERE `name` LIKE '%SEAT%'))> 0

Este tema no es de PHP, esto es de MySQL. Lo has posteado en el foro equiovcado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql, select
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 06:11.