2010-09-26 17 views
8

Como tonto como suena, ¿hay una manera de hacer algo como esto:Pregunta MYSQL para buscar a través de TODOS los campos?

select row_id from mytable where * like '%searched_text%'; 

Por * aquí me refiero a "todos los campos" en la tabla, en lugar de mí ellos especificando uno por uno ...

+0

¿Está tratando de crear un índice de texto completo? Puede que tengas mejor suerte con apache lucene y apache solr. –

Respuesta

1

Sí, se llama Full Text Search.

Puede usar la búsqueda de texto completa integrada de MySQL, o usar un producto separado para indexar el texto, como Apache's Lucene (mi favorito personal).

+0

umm - hola Pablo - ¿cómo lo uso? Parece que necesito modificar mis columnas? – siliconpi

+0

El texto completo no ayuda, aún tiene que enumerar todos los campos en los que busca. – Wikeno

+0

@matt_tm, no necesita modificar sus columnas, solo necesita crear un índice de TEXTO COMPLETO en todas las columnas que desea buscar. Es como crear un índice. –

4

Aquí hay una solución combinada con algunos PHP para buscar todos los campos en una tabla específica.

include("db_con.php"); 
//search all fields 
$searchphrase = "banan"; 
$table = "apa303"; 
$sql_search = "select * from ".$table." where "; 
$sql_search_fields = Array(); 
$sql = "SHOW COLUMNS FROM ".$table; 
$rs = mysql_query($sql); 
    while($r = mysql_fetch_array($rs)){ 
     $colum = $r[0]; 
     $sql_search_fields[] = $colum." like('%".$searchphrase."%')"; 
    } 

$sql_search .= implode(" OR ", $sql_search_fields); 
$rs2 = mysql_query($sql_search); 
$out = mysql_num_rows($rs2)."\n"; 
echo "Number of search hits in $table " . $out; 
+1

Debe tenerse en cuenta que en el caso muy probable de que cambie la frase de búsqueda a la entrada del usuario (por ejemplo $ searchphrase = $ _GET ['query']), entonces necesita usar mysql_real_escape_string para evitar la inyección de SQL. – Aron

-2

Él es una solución completa ,, es la modificación de la solución anterior, funcionó para mí, gracias.

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title></title> 
    </head> 
    <body> 
     <?php 
     include('config.php'); 
     $searchphrase = "adsa"; 
     $table = "tenders"; 
     $sql_search = "select * from " . $table . " where "; 
     $sql_search_fields = Array(); 
     $sql = "SHOW COLUMNS FROM " . $table; 
     $rs = mysql_query($sql); 
     while ($r = mysql_fetch_array($rs)) { 
      $colum = $r[0]; 
      $sql_search_fields[] = $colum . " like('%" . $searchphrase . "%')"; 
     } 
     $sql_search .= implode(" OR ", $sql_search_fields); 
     $rs2 = mysql_query($sql_search); 
     $out = mysql_num_rows($rs2) . "\n"; 
     echo "Number of search hits in $table " . $out."<br />"; 
     while ($results = mysql_fetch_array($rs2)){ 
      print $results[0]."<br />"; 
     } 
     ?> 
    </body> 
</html> 
0

Estaba buscando algo como esto para buscar en todos los campos de una tabla. Aunque mi mesa tiene menos información, opté por la respuesta de 'Kilian Lindberg' y realicé la función PDO usando su idea. En esta función, podemos enviar la 'cadena de búsqueda' y 'nombre de la tabla' en el parámetro y devolverá la cadena de SQL que podemos utilizar más allá según nuestro requisito. Pensado en mesas grandes puede ralentizar el proceso.

function columnsTable($Search, $Table){ 
    include("PDO_conn_detail.php"); /* your PDO mysql connection file */ 
    $srchSQLstr = "SELECT * FROM $Table WHERE "; 
    $tableFields = Array(); 

    $colSQL = $conn->prepare("SHOW COLUMNS FROM $Table"); 
    $colSQL->execute(); 
    while ($result_colSQL = $colSQL->fetch(PDO::FETCH_ASSOC)){ 
      $tableFields[] = $result_colSQL[Field]." LIKE ('%".$Search."%')"; 
     } 

    $srchSQLstr .= implode(" OR ", $tableFields); 
    return $srchSQLstr; 
} 
Cuestiones relacionadas