$rows
heeft de gegevens waar uw zoekwoord code
overeenkomsten in uw tabel kunt u uw code herschrijven zodat deze overeenkomt met beide zoekwoorden als
$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>';
'; Bouw uw zoekopdracht in een lus op (over uw opgegeven zoekwoorden) en wijs unieke tijdelijke aanduidingen in de zoekopdracht toe die overeenkomen met alle waarden
Bewerken voor zoeken in volledige tekst
Met behulp van zoeken in volledige tekst kunt u exact dezelfde woordgroep matchen met het opgegeven trefwoord. Om met zoeken op volledige tekst te kunnen werken, hebt u een index van het type FULLTEXT
nodig .
ALTER TABLE `A` ADD FULLTEXT INDEX `fulltextindex` (`text`);
En de vraag zal zijn als
$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>';
'; Bovenstaande code levert een zoekopdracht op zoals
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
in bovenstaande zoekopdracht heeft een waarde voor elke rij en de bijbehorende score, dus u kunt uw resultaat in aflopende volgorde ordenen om eerst de records weer te geven met de hoogste score.