Foros del Web » Bases de Datos » 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 Copiar SELECT integrantes FROM equipos ...
  #1 (permalink)  
Antiguo 01/02/2012, 20:57
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: C:\xampp\htdocs
Mensajes: 1.105
IN(SELECT ....) Mysql

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

Tengo una duda, la siguiente consulta

Código MySQL:
Ver originalCopiar
  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 originalCopiar
  1. SELECT *
  2.         FROM usuarios
  3.            
  4.  
  5.         WHERE id_usuario IN(SELECT integrantes FROM equipos WHERE id = 39)

No sería lo mismo que hacer esto:
Código MySQL:
Ver originalCopiar
  1. SELECT *
  2.         FROM usuarios
  3.            
  4.  
  5.         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




.
__________________
Haz el bien sin mirar a quien, ni su carma
  #2 (permalink)  
Antiguo 01/02/2012, 21:38
Avatar de Yacobh  
Fecha de Ingreso: diciembre-2011
Ubicación: con los pies en la tierra
Mensajes: 32
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, 21:56
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: C:\xampp\htdocs
Mensajes: 1.105
Respuesta: IN(SELECT ....) Mysql

Estas dos funcionan correctamente:
Código MySQL:
Ver originalCopiar
  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 originalCopiar
  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
__________________
Haz el bien sin mirar a quien, ni su carma
  #4 (permalink)  
Antiguo 01/02/2012, 22:26
Avatar de Yacobh  
Fecha de Ingreso: diciembre-2011
Ubicación: con los pies en la tierra
Mensajes: 32
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, 22:29
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: C:\xampp\htdocs
Mensajes: 1.105
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
__________________
Haz el bien sin mirar a quien, ni su carma

Última edición por truman_truman; 01/02/2012 a las 22:49
  #6 (permalink)  
Antiguo 01/02/2012, 23:09
Avatar de Yacobh  
Fecha de Ingreso: diciembre-2011
Ubicación: con los pies en la tierra
Mensajes: 32
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 01/02/2012, 23:27
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: C:\xampp\htdocs
Mensajes: 1.105
Respuesta: IN(SELECT ....) Mysql

nada funciona!, pero usaré PHP como sugeriste antes, gracias
__________________
Haz el bien sin mirar a quien, ni su carma
  #8 (permalink)  
Antiguo 02/02/2012, 06:04
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 452
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 originalCopiar
  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 :)
  #9 (permalink)  
Antiguo 02/02/2012, 06:38
Avatar de gnzsoloyo
Moderador
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 10.435
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, 08:34
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: C:\xampp\htdocs
Mensajes: 1.105
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
__________________
Haz el bien sin mirar a quien, ni su carma
¿Nuevo en el foro? Regístrate



La zona horaria es GMT -6. Ahora son las 09:39.
SEO by vBSEO 3.3.2