Ver Mensaje Individual
  #7 (permalink)  
Antiguo 16/02/2012, 13:27
Avatar de xarmagedonx
xarmagedonx
 
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 16 años
Puntos: 29
Respuesta: Problema al consultar con like

el problema es que si hago un order by asi: "order by uDR.priority, uDR.t, uDR.d,uDR.w,uDR.k", no se porque siempre ordena alfabeticamente.

Lo que hice ahora para que al buscar con 2 palabras o mas no haya problemas, fue crear un if y un else, entonces si uno busca 1 palabra se busca con like, pero si uno busca mas de 1 palabra se utiliza match against.

Pero ahora como siempre aparece otro error diferente, no se si en algun momento voy a poder solucionarlos del todo jajaja.

Problema:

Ahora cuando hago una búsqueda, como por ejemplo "tornado y huracan" aparece algo muy extraño... los primeros resultados contienen números en el título, pero en ningún campo del resultado aparece ni la palabra tornado ni huracan, y algunos otros resultados que también aparecen y no contienen las palabras buscadas.

Les dejo el código para que vean que es lo que estoy haciendo, espero que puedan ayudarme a encontrar este error, porque la verdad que estoy completamente perdido, no se porque se produce:

Código MySQL:
Ver original
  1. // mas arriba hay otros explode casi iguales
  2. $palabras2=explode(' ',$frase);
  3. $condicion2='';
  4. foreach ($palabras2 as $palabra2) {
  5.   if ($condicion2!='') $condicion2.=' OR ';
  6.   $condicion2.="(webDescripcion)";
  7. }
  8. $cant_terminos = count(explode(" ", $terminos));
  9. if($cant_terminos == 1){
  10. $sssql= mysql_query("SELECT distinct uDR.t as webTitulo, uDR.d as webDescripcion, uDR.w as weburl, uDR.k as webkeywords  
  11. from
  12. ((select s1.webTitulo as t, s1.webDescripcion as d, s1.weburl as w, s1.webkeywords as k, 1 as priority from webs s1 where  $condicion LIKE '%$palabra%')
  13. union
  14. (select s2.webTitulo as t, s2.webDescripcion as d, s2.weburl as w, s2.webkeywords as k, 2 as priority from webs s2 where  $condicion1 LIKE '%$palabra1%')
  15. union
  16. (select s3.webTitulo as t, s3.webDescripcion as d, s3.weburl as w, s3.webkeywords as k, 3 as priority from webs s3 where  $condicion2 LIKE '%$palabra2%')) uDR
  17. order by uDR.priority ", $server_link)
  18.  
  19.                               or die(mysql_error());
  20. } else {      
  21.                              
  22. $sssql= mysql_query("SELECT distinct uDR.t as webTitulo, uDR.d as webDescripcion, uDR.w as weburl, uDR.k as webkeywords  
  23. from
  24. ((select s1.webTitulo as t, s1.webDescripcion as d, s1.weburl as w, s1.webkeywords as k, 1 as priority from webs s1 WHERE MATCH ($condicion) AGAINST ('$frase' IN BOOLEAN MODE))
  25. union
  26. (select s2.webTitulo as t, s2.webDescripcion as d, s2.weburl as w, s2.webkeywords as k, 2 as priority from webs s2 WHERE MATCH ($condicion1) AGAINST ('$frase' IN BOOLEAN MODE))
  27. union
  28. (select s3.webTitulo as t, s3.webDescripcion as d, s3.weburl as w, s3.webkeywords as k, 3 as priority from webs s3 WHERE MATCH ($condicion2) AGAINST ('$frase' IN BOOLEAN MODE))) uDR
  29. order by uDR.priority ", $server_link)
  30.  
  31.                               or die(mysql_error());
  32.   }

La verdad es que esto me hizo aprender bastante de php y mysql pero a este error no le encuentro una solucion posible... espero que logren encontrarlo.

Muchisimas gracias a todos los que me estan ayudando.

PD: Probe aplicando el order by uDR.priority, uDR.t, uDR.d,uDR.w,uDR.k pero sigue dando esos resultados extraños

Última edición por xarmagedonx; 16/02/2012 a las 13:34