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

determinar cual parámetro generó tal o cual resultado en SELECT LIKE

Estas en el tema de determinar cual parámetro generó tal o cual resultado en SELECT LIKE en el foro de Mysql en Foros del Web. hola a todos, por favor si pueden ayudarme con este problema, quiero hacer una busqueda de strings en mi mysql con condiciones OR y saber ...
  #1 (permalink)  
Antiguo 12/10/2014, 15:22
 
Fecha de Ingreso: julio-2005
Mensajes: 9
Antigüedad: 18 años, 9 meses
Puntos: 0
determinar cual parámetro generó tal o cual resultado en SELECT LIKE

hola a todos,

por favor si pueden ayudarme con este problema, quiero hacer una busqueda de strings en mi mysql con condiciones OR y saber el parámetro que origina cada resultado, me explico con un ejemplo:
Código MySQL:
Ver original
  1. SELECT descripcion FROM productos
  2. WHERE descripcion LIKE '%jabon%' OR descripcion LIKE '%shampoo%'

supongamos que me arroja el siguiente resultado:

jabon Palmolive
paquete de 10 jabones Mar
envase 250ml shampoo Jhonson
Shampoo Pantene 300cc

Entonces para este resultado necesito saber cual de los parámetros resultó en cada item encontrado, en este caso sería:

"jabon" -> "jabon Palmolive"
"jabon" -> "paquete de 10 jabones Mar"
"shampoo" -> "envase 250ml shampoo Jhonson"
"shampoo" -> "Shampoo Pantene 300cc"

Nosé si quedó claro el problema, cuando es una busqueda con varios patrones cómo puedo saber qué patron arrojó qué resultado si hubiere.

desde ya gracias por sus comentarios!

Última edición por gnzsoloyo; 12/10/2014 a las 17:06
  #2 (permalink)  
Antiguo 12/10/2014, 17:12
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: determinar cual parámetro generó tal o cual resultado en SELECT LIKE

No existe forma directa para obtener la información que quieres desde el SQL en si. Especialmente cuando usas una condición OR, ya que esta es una disyunción que es TRUE cuando al menos una de las dos condiciones lo es, por lo que no diferencia sobre cual devuelve datos.
Para lograr algo aproximado a lo que deseas tendrás que crear una consulta con UNOIN, donde en cada consulta busques exclusivamente por una de ambas condiciones. Y además deberá hacerlo con UNION ALL, para que permita devolver aquellos casos donde se cumplen ambas simultáneamente.
Código MySQL:
Ver original
  1. SELECT 'jabon' parametro, descripcion
  2. FROM productos
  3. WHERE descripcion LIKE '%jabon%'
  4. SELECT 'shampoo' parametro, descripcion
  5. FROM productos
  6. WHERE descripcion LIKE '%shampoo%'

La verdad es que lo que quieres buscar parece carecer de utilidad genérica. Da la impresión de que quieres lograr algún tipo de valorización estadística que no es propia del SQL. En todo caso se parece más a lo que se consigue usando indices FULLTEXT y MATCH() AGAINST(), donde si aplica un cálculo de relevancia de lo encontrado en la búsqueda.
LIKE es demasiado genérico, y además lo estás usando de modo ineficiente... Vas a hacer demasiados full table scan en tus queries.
__________________
¿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/10/2014, 18:49
 
Fecha de Ingreso: julio-2005
Mensajes: 9
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: determinar cual parámetro generó tal o cual resultado en SELECT LIKE

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No existe forma directa para obtener la información que quieres desde el SQL en si. Especialmente cuando usas una condición OR, ya que esta es una disyunción que es TRUE cuando al menos una de las dos condiciones lo es, por lo que no diferencia sobre cual devuelve datos.
Para lograr algo aproximado a lo que deseas tendrás que crear una consulta con UNOIN, donde en cada consulta busques exclusivamente por una de ambas condiciones. Y además deberá hacerlo con UNION ALL, para que permita devolver aquellos casos donde se cumplen ambas simultáneamente.
Código MySQL:
Ver original
  1. SELECT 'jabon' parametro, descripcion
  2. FROM productos
  3. WHERE descripcion LIKE '%jabon%'
  4. SELECT 'shampoo' parametro, descripcion
  5. FROM productos
  6. WHERE descripcion LIKE '%shampoo%'

La verdad es que lo que quieres buscar parece carecer de utilidad genérica. Da la impresión de que quieres lograr algún tipo de valorización estadística que no es propia del SQL. En todo caso se parece más a lo que se consigue usando indices FULLTEXT y MATCH() AGAINST(), donde si aplica un cálculo de relevancia de lo encontrado en la búsqueda.
LIKE es demasiado genérico, y además lo estás usando de modo ineficiente... Vas a hacer demasiados full table scan en tus queries.
tenes razon gnzsoloyo, mi busqueda es ineficiente, y va ser peor cuando crezca la BD, pensé en usar FULLTEXT pero como se trata de un campo VARCHAR de 30 solamente y no de un tipo TEXT con mucho texto...pensé que con LIKE bastaba.

ok voy a reformular mi código y optimizarlo, gracias gnzsoloyo por tu comentario!
  #4 (permalink)  
Antiguo 12/10/2014, 18:53
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: determinar cual parámetro generó tal o cual resultado en SELECT LIKE

Cita:
pensé en usar FULLTEXT pero como se trata de un campo VARCHAR de 30 solamente y no de un tipo TEXT
Un índice FULLTEXT no requiere campos TEXT... No confundir.
Manual de referencia:
Cita:
MySQL soporta indexación y búsqueda full-text. Un índice full-text en MySQL es un índice de tipo FULLTEXT. Los índices FULLTEXT pueden usarse sólo con tablas MyISAM; pueden ser creados desde columnas CHAR, VARCHAR, o TEXT como parte de un comando CREATE TABLE o añadidos posteriormente usando ALTER TABLE o CREATE INDEX. Para conjuntos de datos grandos, es mucho más rápido cargar los datos en una tabla que no tenga índice FULLTEXT y crear el índice posteriormente, que cargar los datos en una tabla que tenga un índice FULLTEXT existente.
Actualmente, en MySQL 5.6, los índices de ese tipo son soportados también por las tablas InnoDB, conforme dice el manual más reciente: http://dev.mysql.com/doc/refman/5.6/...trictions.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: determinar, resultado, select, sql
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 00:42.