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

Obtener registros que contengan un determinado número en su campo

Estas en el tema de Obtener registros que contengan un determinado número en su campo en el foro de Mysql en Foros del Web. Hola a todos. Tengo una tabla donde inserto artículos. Los artículos se pueden vincular a una o varias categorías. Inserto las ID de las respectivas ...
  #1 (permalink)  
Antiguo 11/12/2011, 20:34
 
Fecha de Ingreso: julio-2009
Mensajes: 172
Antigüedad: 15 años, 4 meses
Puntos: 3
Obtener registros que contengan un determinado número en su campo

Hola a todos.

Tengo una tabla donde inserto artículos. Los artículos se pueden vincular a una o varias categorías.

Inserto las ID de las respectivas categorías en un campo tal que así: 1 5 9 78 98 etc.

Ahora, lo que quiero es que crear listas por categorías. De modo que todo los artículos que contengan la ID 5 se muestren.

Buscando en google intente usar substring. Pero no consigo formular una consulta SQL valida con los ejemplos de otros sitios.

Aquí un ejemplo que no me funciona.

SELECT SUBSTR(cat_id, 5)
FROM articulos
  #2 (permalink)  
Antiguo 11/12/2011, 21:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Obtener registros que contengan un determinado número en su campo

Cita:
Inserto las ID de las respectivas categorías en un campo tal que así: 1 5 9 78 98 etc.
Eso es lo que se denomina campo multivaluado, y estan totalmente prohibidos en las bases de datos relacionales.
Lo que corresponde hacer es una tabla que relacione a cada producto con cada una de las categorías a las que está relacionado.
Hacer otra cosa simplemente te dará consultas basura.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/12/2011, 09:00
 
Fecha de Ingreso: julio-2009
Mensajes: 172
Antigüedad: 15 años, 4 meses
Puntos: 3
Respuesta: Obtener registros que contengan un determinado número en su campo

Hola gnzsoloyo. Al final pude hacerlo con LIKE http://www.forosdelweb.com/f18/limit...7/#post4065945
  #4 (permalink)  
Antiguo 12/12/2011, 12:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Obtener registros que contengan un determinado número en su campo

Hola Josico:

Creo que no te tomaste un poco de tiempo para pensar en lo que te comentó el compañero gnzsoloyo... manejar campos multivaluados como lo estás haciendo es una tontería...

Tal y como lo comentas, es posible hacer la búsqueda que quieres con el like, pero aun así deberías tener cuidado en como estás utilizandolo... por ejemplo si pusiste tu consulta como LIKE '%5%', este regresará también los casos siguientes patrones (55, 15, 151, 555 1115) es decir, cualquier cadena que contenga un 5...

Si optaste por ejemplo por poner espacios así LIKE '% 5 %', esta consulta sólo si el 5 se encuentra en medio de tu campo, pero no funcionará si está al inicio o al final. Checa este script:

Código MySQL:
Ver original
  1. mysql> select * from tabla;
  2. +-------+
  3. | campo |
  4. +-------+
  5. | 5     |
  6. | 1 3 5 |
  7. | 5 7 9 |
  8. | 3 5 7 |
  9. +-------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> select * from tabla where campo like '%5%';
  13. +-------+
  14. | campo |
  15. +-------+
  16. | 5     |
  17. | 1 3 5 |
  18. | 5 7 9 |
  19. | 3 5 7 |
  20. +-------+
  21. 4 rows in set (0.00 sec)
  22.  
  23. mysql> select * from tabla where campo like '% 5 %';
  24. +-------+
  25. | campo |
  26. +-------+
  27. | 3 5 7 |
  28. +-------+
  29. 1 row in set (0.00 sec)

¿Se entiende cual es el problema?... deberías pensar seriamente en cambiar tu modelo de BD, te ahorrará muchos dolores de cabeza en un futuro.

Saludos
Leo.

Etiquetas: determinado, registros, select, sql, tabla, 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 11:26.