sql >> Base de Datos >  >> RDS >> Mysql

Mysql, PHP, buscando varias palabras

Hay dos maneras de hacer esto. El primero es el enfoque bastante obvio. Digamos que tiene todas las palabras que deben aparecer en una matriz llamada $palabrasnecesarias:

$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE 1';

foreach ($necessaryWords as $word)
    $sql .= ' AND concat(subject,body) LIKE "%' . $word . '%"'; //Quotes around string

Sin embargo, usando %foo% es bastante lento, ya que no se pueden usar índices, por lo que esta consulta puede causar problemas de rendimiento con tablas grandes y/o una gran cantidad de palabras necesarias.

El otro enfoque sería un FULLTEXT índice sobre subject y body . Podría usar el texto completo MATCH IN BOOLEAN MODE así:

$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE MATCH(subject,body) AGAINST("';

foreach ($necessaryWords as $word)
    $sql .= ' +' . $word;
$sql .= '")';

Tenga en cuenta que su tabla debe usar MyISAM para usar FULLTEXT índices. ACTUALIZACIÓN:A partir de MySQL 5.6 , InnoDB admite FULLTEXT índices también. Supongo que esta podría ser la mejor opción en cuanto a rendimiento. Se puede encontrar más documentación sobre el texto completo en modo booleano en instrucciones .