$rows
wird die Daten haben, wo Ihr Schlüsselwort code
ist Übereinstimmungen in Ihrer Tabelle können Sie Ihren Code so umschreiben, dass er für beide Schlüsselwörter 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>';
'; Erstellen Sie Ihre Abfrage in einer Schleife (über Ihre bereitgestellten Schlüsselwörter) und weisen Sie eindeutige Platzhalter in der Abfrage zu, um sie für alle Werte abzugleichen
Für Volltextsuche bearbeiten
Mit der Volltextsuche können Sie genau denselben Ausdruck mit dem angegebenen Schlüsselwort abgleichen. Um mit der Volltextsuche zu arbeiten, benötigen Sie einen Index vom Typ FULLTEXT
.
ALTER TABLE `A` ADD FULLTEXT INDEX `fulltextindex` (`text`);
Und Abfrage wird wie
sein$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>';
'; Obiger Code erzeugt eine Abfrage wie
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
Die obige Abfrage hat einen Wert für jede Zeile und ihre übereinstimmende Punktzahl, daher können Sie Ihr Ergebnis in absteigender Weise ordnen, um die Datensätze zuerst anzuzeigen, die die höchste Punktzahl haben.