Ver Mensaje Individual
  #9 (permalink)  
Antiguo 10/02/2012, 05:50
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Problema con buscador interno (order by)

Si no tienes id (identificador unico), aparte de que es un error de diseño, la cosa se complica....

Código MySQL:
Ver original
  1. SELECT sbcUnion.webTitulo, sbcUnion.webDescripcion, sbcUnion.weburl
  2. (SELECT webTitulo, webDescripcion, weburl, 1 as Prioridad
  3. FROM webs
  4. WHERE webTitulo like '%$frase%'
  5. SELECT webTitulo, webDescripcion, weburl, 2 as Prioridad
  6. FROM webs
  7. WHERE webDescripcion like '%$frase%'
  8. AND id NOT IN (SELECT id
  9.                         FROM webs
  10.                         WHERE webTitulo like '%$frase%')
  11. SELECT webTitulo, webDescripcion, weburl, 3 as Prioridad
  12. FROM webs
  13. WHERE weburl like '%$frase%'
  14. AND id NOT IN (SELECT id
  15.                         FROM webs
  16.                         WHERE webTitulo like '%$frase%'
  17.                         OR webDescripcion like '%$frase%')
  18. SELECT webTitulo, webDescripcion, weburl, 4 as Prioridad
  19. FROM webs
  20. WHERE webkeywords like '%$frase%'
  21. AND id NOT IN (SELECT id
  22.                         FROM webs
  23.                         WHERE webTitulo like '%$frase%'
  24.                         OR webDescripcion like '%$frase%'
  25.                         OR weburl like '%$frase%')) as sbcUnion
  26. ORDER BY sbcUnion.Prioridad,sbcUnion.webTitulo, sbcUnion.webDescripcion, sbcUnion.weburl


Esto da lo que pides, substituye id por el nombre de tu clave principal, en una sola consulta, no se si será rapida o no.

Si no tienes clave principal, como te he dicho la cosa se complica, creo que lo mejor en ese caso seria lanzar las consultas por separado y con php (a consultar en el foro de php) eliminaria las repeticiones...


Consultas separadas
Código MySQL:
Ver original
  1. SELECT webTitulo, webDescripcion, weburl
  2. FROM webs
  3. WHERE webTitulo like '%$frase%';
  4.  
  5. SELECT webTitulo, webDescripcion, weburl
  6. FROM webs
  7. WHERE webDescripcion like '%$frase%';
  8.  
  9. SELECT webTitulo, webDescripcion, weburl
  10. FROM webs
  11. WHERE weburl like '%$frase%';
  12.  
  13. SELECT webTitulo, webDescripcion, weburl
  14. FROM webs
  15. WHERE webkeywords like '%$frase%';

otro error de diseño que podrias tener por lo que se puede intuir es que el campo

webkeywords

lo estas usando como un campo multi valuado (palabra,palabra2,...) lo que se considera una mala practica.

Te dejo un link al manual, generalmente clarifica conceptos

12.7. Funciones de búsqueda de texto completo (Full-Text)

como podrás leer, si puedes ordenar por relevancia, pero la calcula MySQL no puedes modificarla....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/02/2012 a las 05:57