Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql, PHP, wyszukiwanie wielu słów

Można to zrobić na dwa sposoby. Pierwsze to dość oczywiste podejście. Załóżmy, że masz wszystkie słowa, które muszą pojawić się w tablicy o nazwie $necessaryWords:

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

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

Jednak używając %foo% jest raczej powolny, ponieważ nie można używać żadnych indeksów, więc to zapytanie może powodować problemy z wydajnością przy dużych tabelach i/lub dużej liczbie niezbędnych słów.

Inne podejście to FULLTEXT indeks na subject i body . Możesz użyć pełnotekstowego MATCH IN BOOLEAN MODE tak:

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

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

Pamiętaj, że Twoja tabela musi używać MyISAM aby użyć FULLTEXT indeksy. AKTUALIZACJA:Od MySQL 5.6 , InnoDB obsługuje FULLTEXT indeksy. Myślę, że może to być lepszy wybór pod względem wydajności. Dalszą dokumentację dotyczącą pełnego tekstu w trybie logicznym można znaleźć w instrukcja .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaktualizować strefę czasową dla znaczników czasu (created_at i updated_at) zarządzanych przez Laravel Eloquent?

  2. MySQL:duży VARCHAR kontra TEXT?

  3. Jak uzyskać prawdziwy rozmiar bazy danych MySQL?

  4. Jak przesłać dane bazy danych MySQL do aplikacji internetowej MVC .NET?

  5. Wyszukiwanie z uwzględnieniem wielkości liter w MYSQL dla pola utf8_bin