Saya sudah mencoba mencari tahu bagaimana saya bisa membuat kueri dengan MySQL yang memeriksa apakah nilai (string $haystack
) di kolom tertentu berisi data (string $needle
) tertentu, seperti ini:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
Di PHP, fungsinya dipanggil substr($haystack, $needle)
, jadi mungkin:
WHERE substr(`column`, '{$needle}')=1
php
mysql
sql
string-comparison
arik
sumber
sumber
column LIKE '...'
itu peka huruf besar kecil, dengancolumn LIKE BINARY '...'
itu peka huruf besar kecilLIKE
diusulkan untuk memeriksa substring karena operator ini menggunakan dua karakter wildcard:%
dan_
. Ini berarti jika string $ jarum Anda mengandung salah satu karakter khusus ini maka hasilnya tidak seperti yang diharapkan sama sekali. (-1) untuk balasan ini, dan (+1) untuk balasan INSTR.Menggunakan:
Referensi:
sumber
LIKE %...%
tidak akan menggunakan indeks jika ada, jadi mereka harus setara;LIKE ...%
akan menggunakan indeks jika ada. Jika kinerja adalah masalah nyata, Pencarian Teks Lengkap (FTS) akan menjadi pendekatan yang lebih baik.like
operator. Denganinstr
frasa dapat dipesan seperti iniselect * from table order by instr(col1,"mystring")
sumber
Tambang menggunakan
LOCATE
di mysql:Fungsi ini multi-byte aman, dan case-sensitive hanya jika setidaknya satu argumen adalah string biner.
Dalam kasus Anda:
sumber
Selain jawaban dari @WoLpH.
Saat menggunakan
LIKE
kata kunci, Anda juga memiliki kemampuan untuk membatasi arah string yang cocok. Sebagai contoh:Jika Anda mencari string yang dimulai dengan
$needle
:Jika Anda mencari string yang diakhiri dengan
$needle
:sumber
Ketahuilah bahwa ini berbahaya:
lakukan dulu:
jadi itu akan mencegah kemungkinan serangan.
sumber
mysql_real_escape_string
akan ditinggalkan dalam rilis PHP masa depan.$stmt = $dbh->prepare("Where 'column' LIKE '{:needle}'"); $stmt->bindParam(':needle', $needle); $stmt->execute();
Anda mungkin mencari
find_in_set
fungsi:Fungsi ini berfungsi seperti
in_array
fungsi dalam PHPsumber