Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/04/2013, 08:58
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Ordenar registros con instr()

Hola Naica:

No entiendo bien a qué te refieres con eso de "combinar a ambos algoritmos", supongo que lo que intentas hacer es utilizar dos criterios de ordenación, es correcto?

Vayamos por partes, la ordenación se realiza de manera jerárquica es decir, puedes colocar distintos criterios o campos, separados por comas:

Código:
ORDER BY campo1, campo2, INSTR(cadena, 'ALGO')....
Esto quiere decir que los registros se ordenarán en primer lugar por el campo1, una vez ordenados todos los registros por este campo se procederá a ordenar por el campo2 y así sucesivamente... observa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+--------+--------+--------+
  3. | id   | campo1 | campo2 | campo3 |
  4. +------+--------+--------+--------+
  5. |    1 |      1 |     10 | a      |
  6. |    2 |      2 |      9 | b      |
  7. |    3 |      3 |      5 | c      |
  8. |    4 |      1 |      9 | d      |
  9. |    5 |      2 |      4 | e      |
  10. |    6 |      3 |      1 | f      |
  11. |    7 |      1 |      2 | g      |
  12. |    8 |      2 |      3 | h      |
  13. |    9 |      3 |      5 | i      |
  14. +------+--------+--------+--------+
  15. 9 rows in set (0.00 sec)
  16.  
  17. mysql> SELECT * FROM tabla ORDER BY campo1, campo2, campo3;
  18. +------+--------+--------+--------+
  19. | id   | campo1 | campo2 | campo3 |
  20. +------+--------+--------+--------+
  21. |    7 |      1 |      2 | g      |
  22. |    4 |      1 |      9 | d      |
  23. |    1 |      1 |     10 | a      |
  24. |    8 |      2 |      3 | h      |
  25. |    5 |      2 |      4 | e      |
  26. |    2 |      2 |      9 | b      |
  27. |    6 |      3 |      1 | f      |
  28. |    3 |      3 |      5 | c      |
  29. |    9 |      3 |      5 | i      |
  30. +------+--------+--------+--------+
  31. 9 rows in set (0.00 sec)

De primera vista podrías pensar que los datos de la columna tres están desordenados, pero no es así, sino que dependen de los dos primeros campos... En los últimos dos registros, al haber paridad en los dos primeros criterios de ordenación entonces si se ordena por el campo3.

Ahora, volviendo a tu caso, no sé qué es exactamente lo que pretendes, pero podrías hacerlo así:

Código MySQL:
Ver original
  1. SELECT uDR.webTitulo, uDR.webDescripcion, uDR.webkeywords, uDR.weburl, SUM(uDR.priority) AS SPriority
  2. (  SELECT s1.webTitulo, s1.webDescripcion, s1.weburl, s1.webkeywords, 4 AS priority FROM webs s1 WHERE MATCH (webTitulo) AGAINST ('recetas de cocina')
  3.    UNION
  4.    SELECT s2.webTitulo, s2.webDescripcion, s2.weburl, s2.webkeywords, 2 AS priority FROM webs s2 WHERE MATCH (webkeywords) AGAINST ('recetas de cocina*' IN BOOLEAN MODE)
  5.    UNION
  6.    SELECT s3.webTitulo, s3.webDescripcion, s3.weburl, s3.webkeywords, 1 AS priority FROM webs s3 WHERE MATCH (webDescripcion) AGAINST ('recetas de cocina')
  7.    UNION
  8.    SELECT s4.webTitulo, s4.webDescripcion, s4.weburl, s4.webkeywords, 1 AS priority FROM webs s4 WHERE MATCH (weburl) AGAINST ('recetas de cocina')
  9. ) uDR
  10. GROUP BY uDR.webTitulo, uDR.weburl, uDR.webDescripcion, uDR.webkeywords
  11. ORDER BY SPriority DESC, IF(INSTR(uDR.webTitulo, 'recetas de cocina'), INSTR(uDR.webTitulo, 'recetas de cocina'), 65535)

Tu consulta tenía paréntesis completamente inutiles, además de algunos errores con las comillas simples, dale un vistazo para ver si es lo que necesitas y si no es así, postea algunos datos de ejemplo y que es lo que esperas como salida para poder tratar de ayudarte.

Saludos
Leo.