Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mysql, PHP, mencari banyak kata

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 MyISAM untuk menggunakan FULLTEXT indeks. PEMBARUAN:Mulai MySQL 5.6 , 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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Terhubung pada database MySQL jarak jauh melalui Python

  2. Bisakah kita mengimpor SQL dari ember S3 ke AWS ec2 (contoh)?

  3. MySQL:Cara sederhana untuk mengubah nilai bidang int

  4. Cara mendapatkan catatan yang berisi karakter alfaNumerik + spasi putih

  5. CONV() fungsi dalam kepingan salju