Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

Archive for Windows

Los que usamos Mysql ya no somos tan hippies…. ?

Ahora resulta que soy experto en la base de datos open source de sun.. ?



Jamas pense que algo asi pudiece pasar con mysql….. a lo mejor tu si lo pensaste(con un porrito en mano..)….

Buscar usando LIKE o Full Text Search - php/mysql

Vamos a crear un buscador que busque en una tabla de nuestra base de datos y que según el número de palabras buscadas utilice LIKE o el Full Text Search de MySQL.

Que és Full Text Search?
El Full Text Search utiliza los índices de la tabla para hacer las búsquedas y hace las comparaciones de la misma forma que se hacen en los grandes buscadores y no como una comparación sencilla y costosa en tiempo como la utilizada por el like.

El resultado que devuelve es ordenado por similitud a las palabras o cadena buscada, esto se puede hacer ya que cuando va encontrando los resultados el mismo le asigna un indice de similitud a lo buscado, con lo que podemos saber lo exacto que es el resultado.

Para crear el índice en la tabla a buscar haremos:

   ALTER TABLE noticias ADD FULLTEXT(titulo, texto);

Suponiendo que la tabla se llama noticias y los campos que queremos buscar són titulo y texto. Debemos tener en cuenta que los campos del índice solo pueden ser Char, Varchar o TEXT.

Nota: Los índices hacen que las tablas ocupen más espacio en disco peró agilizan mucho las búsquedas.

MATCH … AGAINST
Para buscar en la tabla utilizando el índice, haremos:

SELECT * FROM el índice WHERE MATCH(titulo, texto)
AGAINST ('palabras_a_buscar')

Si queremos saber noticias de similitud del resultado podemos hacer:

   SELECT * FROM noticias WHERE MATCH(titulo, texto)
   AGAINST ('palabras_a_buscar') AS similitud

Donde similitud sera el valor de aproximación a la busqueda.

Problemas del MATCH … AGAINST
El problema principal es que ens busquedas de una sola palabra acostumbra a fallar, ya que tiene un límite dado por el MySQL de busqueda de palabras mayores o iguales a 4 carácteres, por lo que si buscasemos por ejemplo PHP no tendriamos resultado. Lo que haremos es mirar si la cadena que nos llega es de una sola palabra o de más de una, en caso de ser una haremos la búsqueda usando LIKE y si es más de una usaremos MATCH … AGAINST Buscador con paginación.

 //Conectar con la base de datos,
 //también podemos poner el ADODB
 //Yo utilizo conexiones con código directamente aquí

 include ("conexion_bd.php");
        if ($p_busca!='')
        { if (!$num) $num=0;
             //Separamos las palabras usando cada espacio como separador
             //Hacemos la separación de la cadena a buscar
             $cadena_buscada=explode(" ",$p_busca);
             if (count($cadena_buscada)==1)
             {
               //Si solo hay una palabra usamos LIKE
               $sql=" SELECT SQL_CALC_FOUND_ROWS titulo, texto
                        FROM noticiasLIKE '%".$p_busca."%' OR texto LIKE '%".$p_busca."%'
                        WHERE titulo
                        LIMIT ".$num.",10";
             }
             elseif (count($cadena_buscada)>1)
             {
               //Si hay más de una palabra usaremos MATCH AGAINST
               $sql=" SELECT SQL_CALC_FOUND_ROWS titulo, texto, MATCH (titulo, texto)
                        AGAINST MATCH (titulo,AS Score FROM noticias
                                    ('".$p_busca."') texto) AGAINST ('".$p_busca."')
                        WHERE BY Score DESC LIMIT ".$num.",10";
                        ORDER
             }
               $rs = $db->Execute($sql);
               if (!$rs) echo $conn->ErrorMsg();
               else if ($rs->fields["id"])
               { while (!$rs->EOF)
                  { echo $rs->fields["titulo"].'‘.$rs->fields[”texto”];
                  } $rs->MoveNext();
     }
     else
        echo ‘No se han encontrado resultados correspondientes a su búsqueda.’;
     //Paginación
     $rs_cont=$db->Execute (”select found_rows() as total_filas”);
     if ($rs_cont->fields[”total_filas”]>10)
     { for ($i=0; $i<$rs_cont->fields[”total_filas”] && $i<50; $i=$i+10)
        { $a++;
            echo '[’.$a.’] ’;
     } }
}

10 cosas que linux hace bien que windows no

tux linuxMis favoritas:

>> Actualizaciones frecuentes y sin dolor todo el tiempo, Yo tengo un escritorio 3d(compiz) y una barra de busqueda(deskbar) por mas de un año sin problemas.
>> Multiple escritorios. facil, uno es muy poco para ser util.

checa la lista completa.

Microsoft permite “actualizar” a XP

Pues si que vista ya es el nuevo WindowsME 2.0, la nota aca.

Lo siento, windows vista forma parte integral del sistema

Y la estupidez(o inteligencia?) de los vendedores de productos microsoft cada vez es mayor, este es el que chigados del dia.