$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.