Foros del Web » Programando para Internet » PHP »

match again o select

Estas en el tema de match again o select en el foro de PHP en Foros del Web. Hola a todos. ¿ Cómo puedo hacer una consulta a la base de datos dependiendo de la variable que recibo para hacer un match again ...
  #1 (permalink)  
Antiguo 09/07/2008, 04:07
 
Fecha de Ingreso: junio-2008
Mensajes: 291
Antigüedad: 15 años, 10 meses
Puntos: 9
match again o select

Hola a todos. ¿ Cómo puedo hacer una consulta a la base de datos dependiendo de la variable que recibo para hacer un match again o un select normal?

Había pensado en algo como: iff(isset)... pero no sé muy bien cómo...


Gracias a todos.
  #2 (permalink)  
Antiguo 09/07/2008, 07:40
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: match again o select

Hola

podrias hacer esto mas o menos
si es solo una palabra la que ponen en el cuadro de busqueda que la consulta sea con LIKE y si son do o mas que la consulta a la BBDD sea con MATCH AGAINST.
Pero debes tener los campos de la BBDD, que desees usar para buscar como INDICE FULL TEXT, lo puedes hacer con administrador de MYSQL
PhpMyAdmin

Código PHP:

$busqueda 
$_POST['palabra'];
if (
$busqueda<>''){ 
  
//CUENTA EL NUMERO DE PALABRAS 
  
$trozos=explode(" ",$busqueda); 
  
$numero=count($trozos); 
  if (
$numero==1) { 
    
//SI SOLO HAY UNA PALABRA DE BUSQUEDA SE ESTABLECE UNA INSTRUCION CON LIKE 
    
$_pagi_sql="SELECT * FROM descargas WHERE description =1 
      AND name LIKE  '%$busqueda%' OR description LIKE  '%$busqueda%' ORDER  BY name ASC"

  } elseif (
$numero>1) { 
    
//SI HAY UNA FRASE SE UTILIZA EL ALGORTIMO DE BUSQUEDA AVANZADO DE MATCH AGAINST 
    //busqueda de frases con mas de una palabra y un algoritmo especializado 
   
         
$_pagi_sql="SELECT * , MATCH(name, description) AGAINST ('+$busqueda') as Score FROM descargas
                        WHERE MATCH (name, description) AGAINST ('+$busqueda') ORDER BY Score DESC"
;
 
 
 
  } else{echo 
"no hay resultados";} 
Un saludo

Última edición por jaronu; 09/07/2008 a las 07:51
  #3 (permalink)  
Antiguo 09/07/2008, 09:17
 
Fecha de Ingreso: junio-2008
Mensajes: 291
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: match again o select

Hola. Me aparece en blanco. Mi indice se llama NOMB y agrupa varios campos fulltext. este es el code:

Código PHP:
<?php 

$link
=mysql_connect("localhost","user","passw"); 
mysql_select_db("db"$link); 


if (!empty(
$clave))

 
   
$trozos=explode(" ",$clave); 
   
$numero=count($trozos); 
  if (
$numero==1)
   { 
 
   
$cadbusca="SELECT * FROM vells WHERE NOMB LIKE '%$clave%' OR AUTOR LIKE '%$clave%' OR TEMA LIKE '%$clave%'OR EDITORIAL LIKE '%$clave%' OR OBSERVA LIKE '%$clave%'order by AUTOR limit 50"
  }
  elseif (
$numero>1)
   { 
 
  
$cadbusca="SELECT * FROM tabla WHERE MATCH(AUTOR) AGAINST ('$clave') order by AUTOR limit 50"

$result= @mysql_query($cadbusca); 
while (
$row=@mysql_fetch_array($result))
{

  echo 
$row['AUTOR'];
  echo 
$row['NOMB'];

  }
 }
?>
  #4 (permalink)  
Antiguo 09/07/2008, 09:21
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: match again o select

Hola

No importa el nombre del indice, solo si el indice es del tipo FULL TEXT, y la tabla de la BD MyISAM creo, otro motor de almacenamiento de MySQL no sirve con este codigo, como podria ser InnoDB.
y no estas aplicando el codigo igual que como te puse en el ejemplo, hay bastantes diferencias.

un saludo
  #5 (permalink)  
Antiguo 09/07/2008, 09:34
 
Fecha de Ingreso: junio-2008
Mensajes: 291
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: match again o select

Muchas gracias! funciona.. Una cosa:¿es correcto este anidamiento? Mil gracias!!


Código PHP:
<?php 

$link
=mysql_connect("localhost","user","pass"); 
mysql_select_db("db"$link); 

$clave $_GET['clave'];
if (
$clave<>''){  


 
   
$trozos=explode(" ",$clave); 
   
$numero=count($trozos); 
  if (
$numero==1)
   { 
 
   
$cadbusca="SELECT * FROM tabla WHERE NOMB LIKE '%$clave%' OR AUTOR LIKE '%$clave%' OR TEMA LIKE '%$clave%'OR EDITORIAL LIKE '%$clave%' OR OBSERVA LIKE '%$clave%'order by AUTOR limit 50"
  }
  elseif (
$numero>1)
   { 
 
  
$cadbusca="SELECT * , MATCH(NOMB, AUTOR) AGAINST ('+$clave') as Score FROM vells 
                        WHERE MATCH (NOMB, AUTOR) AGAINST ('+$clave') ORDER BY AUTOR"


$result= @mysql_query($cadbusca,$link); 
while (
$row=@mysql_fetch_array($result))
{

  echo 
$row['AUTOR'] ;echo $row['NOMB'];echo $row['PVP']; echo "<br>";
 
// echo $row['NOMB'];

  
}
 }
 }else if (isset(
$clave)) {
  
$cadbusca="SELECT * FROM tabla WHERE NOMB LIKE '%$NOMB%' OR AUTOR LIKE '%$AUTOR%' order by AUTOR limit 50"
  }

?>
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 18:28.