Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tìm kiếm nhiều từ khóa

$rows sẽ có dữ liệu mà từ khóa của bạn code đối sánh trong bảng của bạn, bạn có thể viết lại mã của mình để đối sánh cho cả hai từ khóa là

$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>';
';

Tạo truy vấn của bạn trong vòng lặp (qua các từ khóa đã cung cấp của bạn) và chỉ định các trình giữ chỗ duy nhất trong truy vấn để đối sánh cho tất cả các giá trị

Chỉnh sửa cho tìm kiếm toàn văn

Sử dụng tìm kiếm toàn văn, bạn có thể đối sánh chính xác cùng một cụm từ với từ khóa được cung cấp, Để làm việc với tìm kiếm toàn văn, bạn cần một chỉ mục thuộc loại FULLTEXT .

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

Và truy vấn sẽ như thế nào

$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>';
';

Đoạn mã trên sẽ tạo ra một truy vấn như

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

Bí danh score trong truy vấn trên sẽ có giá trị cho mỗi hàng và điểm phù hợp của nó, do đó bạn có thể sắp xếp kết quả của mình theo cách giảm dần để hiển thị các bản ghi có điểm cao nhất trước tiên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL NHƯ TRONG ()?

  2. chèn dữ liệu từ JSON vào mysql bằng php

  3. JPA:Mối quan hệ nhiều đến nhiều - JsonMappingException:Đệ quy vô hạn

  4. Triển khai cơ sở dữ liệu tính năng được xem nhiều nhất

  5. Sử dụng Tham số trong câu lệnh sql chứa date_format