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

Suma condicional en LIKE?

Estas en el tema de Suma condicional en LIKE? en el foro de Mysql en Foros del Web. Hola de nuevo, me gustaría saber como se hace lo siguiente, otorgarle un valor a los resultados según las coincidencias que haya tenido en la ...
  #1 (permalink)  
Antiguo 04/01/2014, 09:08
 
Fecha de Ingreso: noviembre-2012
Mensajes: 76
Antigüedad: 11 años, 5 meses
Puntos: 3
Busqueda Suma condicional en LIKE?

Hola de nuevo,
me gustaría saber como se hace lo siguiente, otorgarle un valor a los resultados según las coincidencias que haya tenido en la búsqueda.
Conozco el método MATCH AGAINST, pero me interesaría hacerlo con LIKE.

Hasta ahora tengo:
Código MySQL:
Ver original
  1. FROM tabla
  2. WHERE fecha <='" . $ahora . "' AND (titulo LIKE '%$palabra1%' OR titulo LIKE '%$palabra2%' OR titulo LIKE '%$palabra3%')

Si encuentra cualquiera de las 3 palabras me mostraría el resultado, pero yo lo que quiero es que si por ejemplo un titulo contiene la palabra1 y la palabra2 se muestre en primer lugar por haber tenido mas coincidencias que en otro titulo que solo haya encontrado 1 de las 3 palabras.

Para ello supongo que tendre que introducir alguna suma condicional, algo como SUM(IF(titulo LIKE '%$palabra1%', 1, 0)) o algo asi. Pero debo estar haciéndolo mal pues no consigo hacerlo. Alguien podría ayudarme?

Gracias!

Última edición por gnzsoloyo; 04/01/2014 a las 10:08 Razón: Codigo de programacion no permitido en foros de BBDD
  #2 (permalink)  
Antiguo 04/01/2014, 16:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Suma condicional en LIKE?

Yo usaría FULL-TEXT, pero...
No te he puesto lo de la fecha, solo lo de titulo...
Código MySQL:
Ver original
  1. SELECT  titulo, (
  2. IF(titulo LIKE  '%palabra%', 1, 0 ) + IF(titulo LIKE  '%palabra2%', 1, 0 )+IF(titulo LIKE  '%palabra3%', 1, 0 )
  3. )relevancia
  4. FROM  tabla
  5. WHERE titulo LIKE  '%palabra1%'
  6. OR titulo LIKE  '%palabra2%'
  7. OR titulo LIKE '%palabra3%'
  8. ORDER BY relevancia DESC
  #3 (permalink)  
Antiguo 05/01/2014, 15:06
 
Fecha de Ingreso: noviembre-2012
Mensajes: 76
Antigüedad: 11 años, 5 meses
Puntos: 3
Respuesta: Suma condicional en LIKE?

Muchas gracias!!!!
Mis agradecimientos para ti!

¿Crees que me puede perjudicar mucho usar este método VS Full-text en velocidad? ¿Cómo podría medirlo?

Saludos!
  #4 (permalink)  
Antiguo 05/01/2014, 15:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Suma condicional en LIKE?

creo que sí. No soy técnico y poco podría decirte sobre cómo medir ese perjuicio, pero sí puedo decirte que creo que full-text con su relevancia te lo permitirá y hará un solo recorrido por la tabla, mientras que esto que haces requerirá al menos varios. A ver si alguien más versado en las cuestiones técnicas puede darte alguna respuesta a tu última pregunta.
  #5 (permalink)  
Antiguo 05/01/2014, 16:44
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, 5 meses
Puntos: 2658
Respuesta: Suma condicional en LIKE?

Cita:
Iniciado por cybervandal Ver Mensaje
Muchas gracias!!!!
Mis agradecimientos para ti!

¿Crees que me puede perjudicar mucho usar este método VS Full-text en velocidad? ¿Cómo podría medirlo?

Saludos!
Técnicamente hablando, usar LIKE, y en especial cuando usas comodines en ambos lados, estás haciendo el peor tipo de consulta posible.
Una consulta con una condición
Código MySQL:
Ver original
  1. LIKE '%loquesea%'
genera directamente un FULL TABLE SCAN, que significa que leerá toda la tabla, porque no puede diferenciar nada. Estás pidiéndole que busque lo que comience con cualquier cosa y que termine con cualquier cosa.
Pero como eso abarca todo leerá todas las veces la tabla compelta, para luego buscar adentro... con lo que deberá revisar absolutamente todo el contenido.
Es simple, lisa y llanamente un espanto.
Hay varias sazones prácticas para considerar que usar LIKE y especialmente con comodines así es la peor forma posible, y además innecesaria.
Antes bien, FULLTEXT es un modo extremadamente potente para resolver esas consultas, con la salvedad que no busca por aproximaciones (LIKE), sino que tiene algunas restricciones adicionales, las cuales permiten mejores consultas también.
En otras palabras, no uses LIKE, usa FULLTEXT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 07/01/2014, 07:59
 
Fecha de Ingreso: noviembre-2012
Mensajes: 76
Antigüedad: 11 años, 5 meses
Puntos: 3
Respuesta: Suma condicional en LIKE?

Gracias gnzsoloyo por la info.
Mis agradecimientos también para ti!
Saludos

Etiquetas: condicional, select, sql, suma, 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 20:54.