Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyszukiwanie wielu słów kluczowych

$rows będzie miał dane, w których słowo kluczowe code dopasowania w tabeli, możesz przepisać kod, aby dopasować oba słowa kluczowe 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>';
';

Zbuduj zapytanie w pętli (na podstawie podanych słów kluczowych) i przypisz unikalne symbole zastępcze w zapytaniu, aby pasowały do ​​wszystkich wartości

Edytuj do wyszukiwania pełnotekstowego

Korzystając z wyszukiwania pełnotekstowego, możesz dopasować dokładnie tę samą frazę do podanego słowa kluczowego. Aby pracować z wyszukiwaniem pełnotekstowym, potrzebujesz indeksu typu FULLTEXT .

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

Zapytanie będzie wyglądało jak

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

Powyższy kod wygeneruje zapytanie, takie jak

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 w powyższym zapytaniu będzie miał wartość dla każdego wiersza i jego dopasowany wynik, dzięki czemu możesz uporządkować wynik w kolejności malejącej, aby najpierw wyświetlić rekordy, które mają najwyższy wynik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaimportować XML z treścią określoną jako atrybuty do tabeli MySQL?

  2. Jak sprawdzić wydajność zapytania mysql?

  3. Jak posortować wyniki zapytań według odległości w pakiecie Laravel QueryBuilder / MySQL Spatial?

  4. Używanie @DECLARE w MYSQL 5.1

  5. Zaktualizuj informacje o bazie danych za pomocą przycisku onclick