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

mysql обича да съпоставя пълната дума или началото на дума в низ

Както вече беше посочено във въпроса, заявката

$query = 'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE "' . $searchText . '%"'
                                . 'OR SEARCHFIELD LIKE "% ' . $searchText . '%"'

работи за съвпадение на записи, където SEARCHFIELD съдържа дума, която започва с (или е равна на) $searchText

По отношение на производителността направих тест на моята машина за разработка MBP 2,2 GHz i7 quad core :

Търсенето на дума в 4000 записа отнема около 40 милисекунди.

Записите обикновено се индексират (без пълен текст).

Имам няколко хиляди записа и заявката не се изпълнява много често, така че за мен е добре.
Решението може да не е подходящо за други контексти.

За да създам подготвено изявление с горната заявка, използвах техниката, описана тук:

Изключване на заместващи карти на MySQL

Полученият код е както следва:

function like($s, $e)
{
    return str_replace(array($e, '_', '%'), array($e . $e, $e . '_', $e . '%'), $s);
}

/* ... */

/* create a prepared statement */
$stmt = $mysqli->prepare(
    'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE ? ESCAPE "=" OR SEARCHFIELD LIKE ? ESCAPE "="'
); 

if( $stmt )
{
    /* escape the text */
    $escSearchText = like( $searchText, "=" );

    /* 'like' parameters */
    $like1 = $escSearchText . "%";
    $like2 = "%" . $escSearchText . "%";

    /* bind parameters for markers */
    $stmt->bind_param( "ss", $like1, $like2 );

/* ... */


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 500 - Възникна грешка - функцията DB не отчита грешки при добавяне на нова статия в Joomla

  2. Как мога да избера само първото отделно съвпадение от поле в MySQL?

  3. Зареждане на 5 милиона реда в Pandas от MySQL

  4. Python MySql Insert не работи

  5. Как да избирате от две таблици в MySQL, дори ако не всички редове в едната таблица имат кореспонденти в другата?