sql >> Databáze >  >> RDS >> Mysql

Vyhledávání více klíčových slov

$rows bude mít data, kde je vaše klíčové slovo code shody ve vaší tabulce můžete přepsat kód tak, aby odpovídal oběma klíčovým slovům jako

$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>';
';

Sestavte svůj dotaz ve smyčce (přes poskytnutá klíčová slova) a přiřaďte v dotazu jedinečné zástupné symboly, aby odpovídaly všem hodnotám

Upravit pro fulltextové vyhledávání

Pomocí fulltextového vyhledávání můžete přiřadit přesně stejnou frázi k zadanému klíčovému slovu. Abyste mohli pracovat s fulltextovým vyhledáváním, potřebujete index typu FULLTEXT .

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

A dotaz bude jako

$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>';
';

Výše uvedený kód vytvoří dotaz jako

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 ve výše uvedeném dotazu bude mít hodnotu pro každý řádek a jeho odpovídající skóre, takže můžete výsledek seřadit sestupně, abyste jako první zobrazili záznamy, které mají nejvyšší skóre.



  1. Vyberte příkaz, chcete-li najít duplikáty v určitých polích

  2. Implementace jediného přihlášení pro tři webové stránky v PHP?

  3. Php Session a post problémy na přihlašovací stránce

  4. GROUP BY pro souvislé řádky v SQL