Mysql
 sql >> база данни >  >> RDS >> Mysql

Търсене по няколко ключови думи

$rows ще има данните, където вашата ключова дума code съвпадения във вашата таблица, можете да пренапишете кода си, за да съвпадне и за двете ключови думи като

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

Изградете заявката си в цикъл (върху предоставените от вас ключови думи) и задайте уникални заместители в заявката, които да съвпадат за всички стойности

Редактиране за пълнотекстово търсене

Използвайки пълнотекстово търсене, можете да съпоставите точно същата фраза с предоставената ключова дума. За да работите с пълнотекстово търсене, имате нужда от индекс от тип FULLTEXT .

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

И заявката ще бъде като

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

Горният код ще създаде заявка като

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

Псевдоним score в горната заявка ще има стойност за всеки ред и съответстващия му резултат, така че можете да подредите резултата си по низходящ начин, за да се покажат първи записите, които имат най-висок резултат.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на база данни mysql за удостоверяване на потребители в Spring сигурност?

  2. Двигател за промяна на таблицата в MySQL

  3. Когато се изпълнява приложение Flask с Flask-SQLAlchemy, как да използвам MySQL клиент в същата база данни по едно и също време?

  4. Как да направите заявка за няколко подобни бази данни с помощта на Peewee?

  5. linux mysql-сървърът не може да намери mysql_config