Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql suka mencocokkan kata lengkap atau awal kata pada string

Seperti yang sudah dinyatakan dalam pertanyaan, kueri

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

berfungsi untuk mencocokkan catatan di mana SEARCHFIELD berisi kata yang dimulai dengan (atau sama dengan) $searchText

Mengenai kinerja, saya telah melakukan tes pada mesin pengembangan saya MBP 2,2 GHz i7 quad core :

Mencari kata di 4.000 catatan membutuhkan waktu sekitar 40 milidetik.

Catatan biasanya diindeks (tanpa teks lengkap).

Saya memiliki beberapa ribu catatan dan kueri tidak terlalu sering berjalan, jadi bagi saya itu bagus.
Solusinya mungkin tidak cocok untuk konteks lain.

Untuk membuat pernyataan yang disiapkan dengan kueri di atas, saya menggunakan teknik yang dijelaskan di sini:

Melepas kartu liar MySQL

Kode yang dihasilkan adalah sebagai berikut:

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. mysql regex utf-8 karakter

  2. Menetapkan nilai kolom sebagai nama kolom dalam hasil kueri SQL

  3. mysql pilih jumlah catatan untuk setiap bulan

  4. Bagaimana cara menggabungkan beberapa baris di MySQL?

  5. MySQL - Mengambil nilai terendah