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

Consulta Select "secciones"

Estas en el tema de Consulta Select "secciones" en el foro de Mysql en Foros del Web. Hola compañeros, Tengo una consulta que busca productos en una tabla de varias formas mediante where y or. La duda es si hay alguna forma ...
  #1 (permalink)  
Antiguo 18/12/2014, 05:13
 
Fecha de Ingreso: septiembre-2006
Ubicación: Madrid
Mensajes: 14
Antigüedad: 17 años, 7 meses
Puntos: 0
Consulta Select "secciones"

Hola compañeros,

Tengo una consulta que busca productos en una tabla de varias formas mediante where y or.

La duda es si hay alguna forma de saber en que seccion de las condiciones ha dado cada resultado.

Es decir, me explico con un ejemplo que es mejor :)

Imaginad que en la tabla están estos productos (aparte de otros)

PRESONUS STUDIOLIVE 328AI
AKIYAMA CDJ-MP32 CD Profesional
DAP Audio PR 32 Black
DAP Audio PR 32 White

Se hace una busca por termino "pr 32"

La consulta que realizo es:

Código SQL:
Ver original
  1. SELECT titulo
  2. FROM producto  
  3. WHERE ( titulo LIKE '%pr 32%'  
  4. OR (titulo LIKE '%pr%' AND titulo LIKE '%32%'))
Devuelve correctamente los datos, pero los dos productos "DP 32" debería devolverlos antes que los otros dos (busqueda exacta y busqueda por palabras)

Lo ideal es que me devolviera los datos de esta forma:

DAP Audio PR 32 Black => 1
DAP Audio PR 32 White => 1
AKIYAMA CDJ-MP32 CD Profesional => 2
PRESONUS STUDIOLIVE 328AI => 2

El 1 y el 2 indican la parte de la consulta por la que se han obtenido los datos

¿Se os ocurre alguna forma de hacerlo que no sea dividiendo la consulta en dos?

Última edición por gnzsoloyo; 18/12/2014 a las 05:36
  #2 (permalink)  
Antiguo 18/12/2014, 05:39
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: Consulta Select "secciones"

Cita:
La duda es si hay alguna forma de saber en que seccion de las condiciones ha dado cada resultado.
Unicamente agregando dos columnas de evaluación donde coloques las mismas condiciones del WHERE:
Código SQL:
Ver original
  1. SELECT
  2.     titulo,
  3.     (titulo LIKE '%pr 32%' ) Cond1,
  4.     (titulo LIKE '%pr%' AND titulo LIKE '%32%') Cond2
  5. FROM producto  
  6. WHERE  titulo LIKE '%pr 32%' OR (titulo LIKE '%pr%' AND titulo LIKE '%32%')
Como LIKE evalúa como TRUE o FALSE, devolvera 1 ó 0 en cada columna, en funcion de si cumple o no.
__________________
¿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 18/12/2014, 05:48
 
Fecha de Ingreso: septiembre-2006
Ubicación: Madrid
Mensajes: 14
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Consulta Select "secciones"

Muchas gracias!!

Me has dado una idea y modificando tu propuesta, creo que he conseguido lo que quería, haré más pruebas y a ver que tal también el rendimiento.

La idea ha sido, asignar un valor si cumple la condición, así el producto que más "puntuación" tenga sale primero

Código SQL:
Ver original
  1. SELECT titulo,
  2. IF((titulo LIKE '%pr 32%')=1,1,0) + IF((titulo LIKE '%pr%' AND titulo LIKE '%32%')=1,1,0) orden
  3. FROM producto
  4. WHERE  titulo LIKE '%pr 32%' OR (titulo LIKE '%pr%' AND titulo LIKE '%32%')
  5. ORDER BY orden DESC

Última edición por gnzsoloyo; 18/12/2014 a las 05:55

Etiquetas: 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 14:13.