$rows
vil have de data, hvor dit søgeord code
matcher i din tabel, kan du omskrive din kode til at matche for begge søgeord som
$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>';
'; Byg din forespørgsel i loop (over dine angivne søgeord) og tildel unikke pladsholdere i forespørgslen, så de matcher for alle værdier
Rediger for fuldtekstsøgning
Ved at bruge fuldtekstsøgning kan du matche nøjagtig samme sætning med det angivne søgeord. For at arbejde med fuldtekstsøgning skal du bruge et indeks af typen FULLTEXT
.
ALTER TABLE `A` ADD FULLTEXT INDEX `fulltextindex` (`text`);
Og forespørgslen vil være som
$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>';
'; Ovenstående kode vil producere en forespørgsel som
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
i ovenstående forespørgsel vil have værdi for hver række og dens matchede score, så du kan bestille dit resultat på faldende måde for at vise posterne først, som har den højeste score.