Comunidad de diseño web y desarrollo en internet online

MySql WHERE IN

Citar            
MensajeEscrito el 29 Ago 2011 04:20 am
Buenas noches...

Estoy tratando de hacer una consulta mysql en una tabla donde hago un WHERE poniendo una cifra IN un campo de la tabla VARCHAR donde tengo varias cifras separadas por coma.
SELECT * FROM news WHERE 299 IN (news.id_usuarios)

El tema es que para que funcione el IN los valores deberia tomarlos como 123, 299, etc...y al traerlo de un campo VARCHAR me lo toma como '123, 299,etc' por lo que no puede encontrar el 299 como un valor.

Alguien sabe como se puede solucionar esto?

Muchas gracias

Por KchTT

16 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 29 Ago 2011 12:29 pm
¿Por qué IN?, ¿por qué no tratar el número como una cadena? lo podrías encontrar con LIKE.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 29 Ago 2011 12:46 pm
El tema es que estoy buscando ids dentro del sting y si uso LIKE pasandole 29 por ejemplo me va a traer el 29, el 290 291, 292, etc

Por KchTT

16 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 29 Ago 2011 01:19 pm
Pues en ese caso todo depende de cómo tengas guardada la lista de número en el campo en cuestión. Podrías usar un LIKE '299,' (nota la coma al final) para que no te tome otra cosa similar, pero si la lista de números que tienes en el campo no termina con coma, tendrás problemas.

La raiz del problema es cómo haz almacenado esos datos en primer lugar. Si quisiste hacer una especie de lista dinámica, esa no era la forma de hacerlo. Tendrías que haber hecho otra tabla, en vez de un campo dentro de una tabla.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 29 Ago 2011 03:57 pm
Los valores los tengo dentro de un campo VARCHAR separados por coma (12, 344,44)...y es para segmentar una nota segun ids de usuarios, por lo que en cada nota cargo cargo esos datos en una campo para que al generar la consulta solo me traiga las notas que tienen el id del usuario x dentro de esa lista de ids separadas por coma.

SELECT news.* FROM news WHERE 299 IN (news.id_usuarios)

Por KchTT

16 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 29 Ago 2011 04:06 pm
Lo entiendo, sí, pero sigue estando mal. Esos ids deben estar en una tabla aparte agrupados con el id de la nota en cuestión.

Entonces a la consulta que si tal id de usuario está en las notas es facilísima y no tendrías este problema (ej: qué pasa cuando la cantidad de ids de usuario sobrepasa el tamaño del campo VARCHAR?).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 29 Ago 2011 04:15 pm
Perdon, estaba guardandolo como LONGTEXT para poder guardar mas caracteres.

La razon por la que no lo pongo en otra tabla es porque por cada nota terminaria generando una catidad de registros innecesarios y ademas tambien tengo otra segmentacion por otro campo con otros ids

Por KchTT

16 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 31 Ago 2011 01:28 am
lo que debes hacer si vas a guardar "ids" en un campo de texto es crear caracteres de inicio y fin de datos para usar con LIKE,
podrias usar caracteres como
|
;
.
-
/
etc
la cosa es que tu tampo de IDs quede como
|1|3|10|103|

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 31 Ago 2011 03:15 am
Si, lo terminer resolviendo de esa manera, muchas gracias

Por KchTT

16 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.