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

Mysql, PHP, търсене на няколко думи

Има два начина да направите това. Първият е доста очевидният подход. Да приемем, че имате всички думи, които трябва да се появят в масив, наречен $necessaryWords:

$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE 1';

foreach ($necessaryWords as $word)
    $sql .= ' AND concat(subject,body) LIKE "%' . $word . '%"'; //Quotes around string

Въпреки това, с помощта на %foo% е доста бавен, тъй като не могат да се използват индекси, така че тази заявка може да причини проблеми с производителността с огромни таблици и/или голям брой необходими думи.

Другият подход би бил FULLTEXT индекс на subject и body . Можете да използвате пълния текст MATCH IN BOOLEAN MODE така:

$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE MATCH(subject,body) AGAINST("';

foreach ($necessaryWords as $word)
    $sql .= ' +' . $word;
$sql .= '")';

Обърнете внимание, че вашата таблица трябва да използва MyISAM за да използвате FULLTEXT индекси. АКТУАЛИЗАЦИЯ:От MySQL 5.6 , InnoDB поддържа FULLTEXT индекси също. Предполагам, че това може да е по-добрият избор по отношение на производителността. Допълнителна документация за пълния текст в булев режим може да бъде намерена в ръководство .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при зареждане на QMYSQL драйвер

  2. Връща само числови стойности в MySQL

  3. Как да стартирам Google Cloud SQL само когато имам нужда от него?

  4. Защо Java не може да се свърже с MySQL 5.7 след последната актуализация на JDK и как трябва да се коригира? (ssl.SSLHandshakeException:Няма подходящ протокол)

  5. LINQ за Java инструмент