Ada dua cara untuk melakukan ini. Yang pertama adalah pendekatan yang agak jelas. Katakanlah Anda memiliki semua kata yang perlu muncul dalam array yang disebut $necessaryWords:
$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE 1';
foreach ($necessaryWords as $word)
$sql .= ' AND concat(subject,body) LIKE "%' . $word . '%"'; //Quotes around string
Namun, menggunakan %foo%
agak lambat, karena tidak ada indeks yang dapat digunakan, sehingga kueri ini dapat menyebabkan masalah kinerja dengan tabel besar dan/atau jumlah kata yang diperlukan tinggi.
Pendekatan lainnya adalah FULLTEXT
indeks pada subject
dan body
. Anda dapat menggunakan teks lengkap MATCH IN BOOLEAN MODE
seperti ini:
$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE MATCH(subject,body) AGAINST("';
foreach ($necessaryWords as $word)
$sql .= ' +' . $word;
$sql .= '")';
Perhatikan bahwa tabel Anda harus menggunakan PEMBARUAN:Mulai MySQL 5.6
, MyISAM
untuk menggunakan FULLTEXT
indeks.InnoDB
mendukung FULLTEXT
indeks juga. Saya kira ini bisa menjadi kinerja pilihan yang lebih baik. Dokumentasi lebih lanjut tentang teks lengkap dalam mode boolean dapat ditemukan di panduan
.