sql >> Databasteknik >  >> RDS >> Mysql

Sök efter flera nyckelord

$rows kommer att ha informationen där ditt sökord code matchningar i din tabell kan du skriva om din kod för att matcha för båda sökorden 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>';
';

Bygg din fråga i loop (över dina angivna sökord) och tilldela unika platshållare i frågan för att matcha för alla värden

Redigera för fulltextsökning

Genom att använda fulltextsökning kan du matcha exakt samma fras med det angivna nyckelordet. För att arbeta med fulltextsökning behöver du ett index av typen FULLTEXT .

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

Och frågan blir 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>';
';

Ovanstående kod kommer att producera en fråga 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 ovanstående fråga kommer att ha värde för varje rad och dess matchade poäng, så du kan ordna ditt resultat på fallande sätt för att visa posterna först som har högst poäng.



  1. Vad händer när jag skickar booleskt True-False till en PDO-sats som en parameter som är bunden till ett int-fält?

  2. PHP-formulärkryssruta och odefinierat index

  3. Är det möjligt att framtvinga datakontroll i MySQL med hjälp av reguljära uttryck

  4. Hur kan jag infoga NULL-data i MySQL-databasen med Python?