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

mysql lubi dopasować całe słowo lub początek słowa w łańcuchu

Jak już wspomniano w pytaniu, zapytanie

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

działa przy dopasowywaniu rekordów, w których SEARCHFIELD zawiera słowo, które zaczyna się od (lub jest równe) $searchText

Jeśli chodzi o wydajność, wykonałem test na mojej maszynie deweloperskiej MBP 2,2 GHz i7 quad core :

Wyszukiwanie słowa w 4000 rekordów zajmuje około 40 milisekund.

Rekordy są normalnie indeksowane (bez pełnego tekstu).

Mam kilka tysięcy rekordów i zapytanie nie jest uruchamiane zbyt często, więc dla mnie jest dobre.
Rozwiązanie może nie być odpowiednie dla innych kontekstów.

Do zbudowania przygotowanego zestawienia z powyższym zapytaniem użyłem techniki opisanej tutaj:

Unikanie dzikich kart MySQL

Wynikowy kod wygląda następująco:

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. Jaka jest właściwa składnia instrukcji IF w MySQL?

  2. Java Spring REST API obsługuje wiele opcjonalnych parametrów

  3. System tagowania:pytania dotyczące rozwiązania Toxi

  4. Paginacja dużych tablic PHP

  5. Połącz dwie tabele w jedno zapytanie SQL i spraw, aby wartości dat były unikalne