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

IN(SELECT ....) Mysql

Estas en el tema de IN(SELECT ....) Mysql en el foro de Mysql en Foros del Web. Hola espero que estén bien, saludos para todos. Tengo una duda, la siguiente consulta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT integrantes FROM equipos WHERE ...
  #1 (permalink)  
Antiguo 01/02/2012, 21:57
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
IN(SELECT ....) Mysql

Hola espero que estén bien, saludos para todos.

Tengo una duda, la siguiente consulta

Código MySQL:
Ver original
  1. SELECT integrantes FROM equipos WHERE id = 39

Me devuelve 1,345,32,65,3 como cadena de texto, ya que el campo integrantes es del tipo TEXT.

Ahora si yo hago lo siguiente:

Código MySQL:
Ver original
  1.         FROM usuarios
  2.            
  3.  
  4.         WHERE id_usuario IN(SELECT integrantes FROM equipos WHERE id = 39)

No sería lo mismo que hacer esto:
Código MySQL:
Ver original
  1.         FROM usuarios
  2.            
  3.  
  4.         WHERE id_usuario IN(1,345,32,65,3 )

NO me funciona, supongo que hay que hacer algun tipo de conversion de datos, ya que son text, habrá que pasarlos a otro formato, estoy adivinando....

Si alguien sabe se lo agradeceré
Saludos para todos




.
__________________
la la la
  #2 (permalink)  
Antiguo 01/02/2012, 22:38
Avatar de Yacobh  
Fecha de Ingreso: diciembre-2011
Ubicación: con los pies en la tierra
Mensajes: 32
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: IN(SELECT ....) Mysql

Hola, tengo una duda; ninguna de las dos consultas te funciona? o la de abajo si te funciona?
__________________
Sistema Llovizna
  #3 (permalink)  
Antiguo 01/02/2012, 22:56
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: IN(SELECT ....) Mysql

Estas dos funcionan correctamente:
Código MySQL:
Ver original
  1. SELECT integrantes FROM equipos WHERE id = 39
  2. SELECT *  FROM usuarios  WHERE id_usuario IN(1,345,32,65,3 )

Pero al convinarlas No fubciona:

Código MySQL:
Ver original
  1. SELECT * FROM usuarios WHERE id_usuario IN(SELECT integrantes FROM equipos WHERE id = 39)


Yo creo que la mano viene porque los datos que obtengo 51,62,37,466 son una cadena de texto así tal cual como se ve con sus comas entre cada una, y al parecer no es reconocida por el IN() solo me tira el primer resultado osea en este caso sería el 51, los demás no aparecen
__________________
la la la
  #4 (permalink)  
Antiguo 01/02/2012, 23:26
Avatar de Yacobh  
Fecha de Ingreso: diciembre-2011
Ubicación: con los pies en la tierra
Mensajes: 32
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: IN(SELECT ....) Mysql

bueno, intenta hacer algo así:
$consulta=SELECT integrantes FROM equipos WHERE id = 39;
$ids = join(',',$consulta);
$sql = "SELECT * FROM usuarios WHERE id_usuario IN($ids)";

no se si funcioné, pero podría servir.
__________________
Sistema Llovizna
  #5 (permalink)  
Antiguo 01/02/2012, 23:29
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: IN(SELECT ....) Mysql

Si, seguramente funcione, pero yo lo quiero hacer con nysql, así no hago dos consultas, la idea es hacer una sola que integre a las dos, para optimizar.
Gracias por contestar
__________________
la la la

Última edición por truman_truman; 01/02/2012 a las 23:49
  #6 (permalink)  
Antiguo 02/02/2012, 00:09
Avatar de Yacobh  
Fecha de Ingreso: diciembre-2011
Ubicación: con los pies en la tierra
Mensajes: 32
Antigüedad: 12 años, 4 meses
Puntos: 7
Respuesta: IN(SELECT ....) Mysql

a ok! comprendo, y bueno yo tambien me pierdo y empiezo a adivinar, has intentado con meterlo entre llaves? o con alguna clase de comillas? no creo que nada de ello funcione.. pero bueno..
__________________
Sistema Llovizna
  #7 (permalink)  
Antiguo 02/02/2012, 00:27
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: IN(SELECT ....) Mysql

nada funciona!, pero usaré PHP como sugeriste antes, gracias
__________________
la la la
  #8 (permalink)  
Antiguo 02/02/2012, 07:04
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: IN(SELECT ....) Mysql

Vas a tener que recurrir a PHP debido a que tu modelo de datos no está bien normalizado, la funciín IN no funciona con un string que cumpla el formato, sino solo con listados.

en tu caso se estaría buscando

Código MySQL:
Ver original
  1. SELECT .... id_usuario IN('1,345,32,65,3') -- acá se busca que id_usuario sea exactamente '1,345,32,65,3'
  2.  
  3. -- que es distinto a
  4.  
  5. SELECT .... id_usuario IN(1,345,32,65,3) -- acá se busca que id_usuario sea 1 o 345 o 32, etc.


Saludos
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)
  #9 (permalink)  
Antiguo 02/02/2012, 07:38
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, 4 meses
Puntos: 2658
Respuesta: IN(SELECT ....) Mysql

Mo te está diciendo Ribon, lo que tienes que hacer es normalizar, porque tienes una relación a la que le falta una tabla.
Es decir, si tienes una entidad Usuarios, otra Grupos y necesitas a los integrantes del grupo, no debes ponerlos todos listados en un campo de la tabla como estás haciendo. Lo que debes hacer es crear una tabla Integrante que contenga un registro por cada par de (id_usuario, id_grupo). Eso es lo que debe hacerse.
El tema es que has creado un campo multivaluado, y esos campos no deben existir. Muestran que el diseño es defectuoso, inconsistente, falto de integridad e ineficiente.

Modifica la estructura de esa relación y volveremos a ver el problema.

Si no quieres hacerlo, tendrás que lidiar con los dolores de cabeza que ocasiona en una consulta un mal diseño de BBDD.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 02/02/2012, 09:34
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: IN(SELECT ....) Mysql

Ok, si , ya se que lo que necesito es una tabla referencial, pero quise hacerlo así porque me pareció que era correcto, pero ahora me doy cuenta que no es así. Ya lo cambie. Saludos y Gracias a todos
__________________
la la la

Etiquetas: select, campos
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 05:13.