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

Consulta con contenido específico

Estas en el tema de Consulta con contenido específico en el foro de Mysql en Foros del Web. Hola a todos! Mi problema es que necesito realizar una consulta donde me devuelva como resultado todos los registros que contengan al menos la condición ...
  #1 (permalink)  
Antiguo 23/09/2011, 13:00
 
Fecha de Ingreso: marzo-2009
Ubicación: Rosario
Mensajes: 14
Antigüedad: 10 años, 8 meses
Puntos: 0
Pregunta Consulta con contenido específico

Hola a todos!
Mi problema es que necesito realizar una consulta donde me devuelva como resultado todos los registros que contengan al menos la condición dada.

La tabla contiene registros similares a estos:

id idSegment
--- --------------
1 1|4|6|3
2 4|19|129

La consulta que tenia pensado hacer es similar a esto:

Código:
SELECT * FROM tabla WHERE idSegment LIKE 1
O sea, lo que necesito es que si le paso el 1 solo me de como resultado el id 1 y no los dos (ya que también el registro 2 contiene un 1 en el 129).

Me explico?

Muchas gracias de antemano y saludos.
  #2 (permalink)  
Antiguo 23/09/2011, 13:27
 
Fecha de Ingreso: septiembre-2011
Mensajes: 11
Antigüedad: 8 años, 3 meses
Puntos: 1
Respuesta: Consulta con contenido específico

Te refieres a que comienzen con 1?
SELECT * FROM tabla WHERE idSegment LIKE '1%'
Intenta con eso
  #3 (permalink)  
Antiguo 23/09/2011, 13:32
 
Fecha de Ingreso: marzo-2009
Ubicación: Rosario
Mensajes: 14
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Consulta con contenido específico

Perdón me expliqué mal..
Me refiero a que sea igual al valor que le paso a la consulta.
Debe ser el mismo si le paso 1 no puede devolverme 12,01,212 etc.

Gracias.
  #4 (permalink)  
Antiguo 23/09/2011, 13:53
 
Fecha de Ingreso: septiembre-2011
Mensajes: 11
Antigüedad: 8 años, 3 meses
Puntos: 1
Respuesta: Consulta con contenido específico

SELECT * FROM tabla WHERE idSegment LIKE '1'
o
SELECT * FROM tabla WHERE idSegment = '1'

pero, en los registros tienes:
id idSegment
--- --------------
1 1|4|6|3
2 4|19|129

o

id idSegment
--- --------------
1 1
1 4
1 6
1 3
2 4
2 19
2 129

?

Porque si es el primer caso, no obtendrás ningún registro.
  #5 (permalink)  
Antiguo 23/09/2011, 13:57
 
Fecha de Ingreso: marzo-2009
Ubicación: Rosario
Mensajes: 14
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Consulta con contenido específico

Es el primer caso.
Es un campo multivaluado.

id idSegment
--- --------------
1 1|4|6|3
2 4|19|129
  #6 (permalink)  
Antiguo 23/09/2011, 14:07
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 9 años, 3 meses
Puntos: 91
Respuesta: Consulta con contenido específico

Un poco pesada esta consulta pero puede funcionar

Código MySQL:
Ver original
  1. FROM tabla
  2. (idSegment = '1' OR
  3. idSegment LIKE '1|%' OR
  4. idSegment LIKE '%|1|%' OR
  5. idSegment LIKE '%|1');

Te recomiendo normalizar bien mejor (si tienes acceso) la relación entre tabla y segmento
saludos.
  #7 (permalink)  
Antiguo 23/09/2011, 14:08
 
Fecha de Ingreso: septiembre-2011
Mensajes: 11
Antigüedad: 8 años, 3 meses
Puntos: 1
Respuesta: Consulta con contenido específico

Deberías usar una tabla detalle, en realidad no sé como se trabajan los campos multivaluados.
  #8 (permalink)  
Antiguo 23/09/2011, 14:11
 
Fecha de Ingreso: marzo-2009
Ubicación: Rosario
Mensajes: 14
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Consulta con contenido específico

MMM creo que con esto es suficiente: idSegment LIKE '%|1|%'
Con respecto a lo que me comentas estuve viendo que es mejor armar una tabla intermedia entre la de contenido y segmentos y hacer las relaciones ahi.
Pero de esta forma se me hacía mas facíl y tenia que realizar menos consultas.
Pensas que los campos multivaluados pueden afectar al rendimiento de las consultas?

Muchas gracias por tus respuestas..
  #9 (permalink)  
Antiguo 23/09/2011, 14:15
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 9 años, 3 meses
Puntos: 91
Respuesta: Consulta con contenido específico

cualquier consulta en la que uses LIKE puede dañar tu salud y la de tus queries xD!
las consultas son exactamente las mismas si usas bien los JOIN.

Saludos.
  #10 (permalink)  
Antiguo 23/09/2011, 14:19
 
Fecha de Ingreso: marzo-2009
Ubicación: Rosario
Mensajes: 14
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Consulta con contenido específico

Funcionó perfecto!

JEJE lo sé, pero como no soy programador, sólo soy un diseñador gráfico me las tengo que arreglar como pueda y recurrir al "si funciona esta bien".

Ya iré mejorando.

Muchas gracias por tu aporte!!!
Saludos.
  #11 (permalink)  
Antiguo 23/09/2011, 14:20
 
Fecha de Ingreso: septiembre-2011
Mensajes: 11
Antigüedad: 8 años, 3 meses
Puntos: 1
Respuesta: Consulta con contenido específico

Como te dije, no tengo experiencia con campos multivaluados y creo que si tienes que realizar la consulta de esa manera, en realidad no se está tomando los valores como valores diferentes sino como una sola cadena.

Encontré otro post de campos multivaluados en el foro.
Cito a gnzsoloyo:
Cita:
Un campo multivaluado implica una relación N:N entre dos entidades, y eso significa que debe forzosamente existir una tercera tabla que administre esa relación. Cualquier otra cosa viola el modelo y trae problemas en las consultas (sin hablar de los problemas de integridad y consistencia).
http://www.forosdelweb.com/f86/where-con-like-select-913995/

Si afecta, si no ahora, en futuras consultas más complejas.
  #12 (permalink)  
Antiguo 23/09/2011, 14:24
 
Fecha de Ingreso: marzo-2009
Ubicación: Rosario
Mensajes: 14
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Consulta con contenido específico

Ups, con tiempo tendré que ver la forma de normalizarlo entonces...
Muchas gracias por el dato.
Saludos.

Etiquetas: contenido, registros, select, tabla
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 07:45.