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

Pencarian beberapa kata kunci

$rows akan memiliki data di mana kata kunci Anda code kecocokan di tabel Anda, Anda dapat menulis ulang kode agar cocok dengan kedua kata kunci sebagai

$keyword = 'hello code';
$exloded = explode(' ', $keyword);
$query = 'SELECT * FROM A ';
$i = 0;
$params = array();
foreach ($exploded as $value):
    if ($i == 0) {
        $query .= ' WHERE `text` LIKE :value_'.$i;
    } else {
        $query .= ' OR `text` LIKE :value_'.$i;
    }
    $params[':value_'.$i] = '%'.$value .'%';
    $i++;
endforeach;
$sth = $db->query($query);
$sth->execute($params);
$rows = $sth->fetchAll();
echo '<pre>';print_r($rows);echo '</pre>';
';

Buat kueri Anda secara berulang (di atas kata kunci yang Anda berikan) dan tetapkan placeholder unik dalam kueri agar cocok dengan semua nilai

Edit untuk pencarian teks lengkap

Menggunakan pencarian teks lengkap, Anda dapat mencocokkan frasa yang sama persis dengan kata kunci yang disediakan,Untuk bekerja dengan pencarian teks lengkap, Anda memerlukan indeks jenis FULLTEXT .

ALTER TABLE `A` ADD FULLTEXT INDEX `fulltextindex` (`text`); 

Dan kueri akan seperti

$keyword = 'hello code';
$exloded = explode(' ', $keyword);
$where = '';
$i = 0;
$select = array();
$params = array();

foreach ($exploded as $value):
    $select[]= ' MATCH(`text`) AGAINST(:value_'.$i.' IN BOOLEAN MODE) ';
    if ($i == 0) {
        $where  .= ' WHERE MATCH(`text`) AGAINST(:value_'.$i.' IN BOOLEAN MODE)';
    } else {
        $where  .= ' OR MATCH(`text`) AGAINST(:value_'.$i.' IN BOOLEAN MODE)';
    }
    $params[':value_'.$i] =  $value ;
    $i++;
endforeach;

$query ='SELECT *,'. implode( ' + ',$select).' AS score FROM A '.$where.' ORDER BY score DESC';
$sth = $db->query($query);
$sth->execute($params);
$rows = $sth->fetchAll();
echo '<pre>';print_r($rows);echo '</pre>';
';

Kode di atas akan menghasilkan query seperti

SELECT *,
MATCH(`text`) AGAINST('hello' IN BOOLEAN MODE)
+ 
MATCH(`text`) AGAINST('code' IN BOOLEAN MODE) AS score
FROM A 
WHERE MATCH(`text`) AGAINST('hello' IN BOOLEAN MODE)
OR  MATCH(`text`) AGAINST('code' IN BOOLEAN MODE)
ORDER BY score DESC

Alias ​​score dalam kueri di atas akan memiliki nilai untuk setiap baris dan skor yang cocok sehingga Anda dapat mengurutkan hasil Anda secara menurun untuk menunjukkan catatan yang memiliki skor tertinggi terlebih dahulu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan koneksi Python SQL (2006, 'kesalahan koneksi SSL:SSL_CTX_set_tmp_dh gagal')

  2. TIMESTAMPDIFF() Contoh – MySQL

  3. Menggunakan local.js untuk menyimpan kata sandi sails-mysql

  4. Memasukkan nilai yang bertambah ke dalam sql ini

  5. Garis waktu bagan Google dengan tanggal dalam sumbu x