sql >> Database teknologi >  >> RDS >> Mysql

Mysql, PHP, søger efter flere ord

Der er to måder at gøre dette på. Den første er den ret indlysende tilgang. Lad os sige, at du har alle de ord, der skal vises i et array kaldet $necessaryWords:

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

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

Men ved at bruge %foo% er ret langsom, da ingen indekser kan bruges, så denne forespørgsel kan forårsage ydeevneproblemer med store tabeller og/eller et stort antal nødvendige ord.

Den anden fremgangsmåde ville være en FULLTEXT indeks på subject og body . Du kan bruge fuldteksten MATCH IN BOOLEAN MODE sådan her:

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

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

Bemærk, at din tabel skal bruge MyISAM for at bruge FULLTEXT indekser. OPDATERING:Fra og med MySQL 5.6 , InnoDB understøtter FULLTEXT også indekser. Jeg gætter på, at dette kunne være det bedre valg med hensyn til ydeevne. Yderligere dokumentation om fuldteksten i boolesk tilstand kan findes i manual .



  1. Automatisering af PostgreSQL daglige opgaver ved hjælp af Jenkins

  2. Implementering af MariaDB-replikering for høj tilgængelighed

  3. #1062 - Dublet indtastning for nøgle 'PRIMÆR'

  4. MySQL vælger gårsdagens dato