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:
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 );
/* ... */