Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencari Berbilang Rentetan dengan Cekap dalam Medan MySQL Dipisahkan Koma?
MySQL: Pendekatan yang Lebih Cekap untuk Carian_dalam_set Berbilang Rentetan
FungsiMySQL find_in_set
terhad kepada carian rentetan tunggal dalam nilai dipisahkan koma. Ini memberikan cabaran apabila perlu mencari rekod yang sepadan dengan berbilang rentetan carian secara serentak.
Cabaran:
Matlamatnya adalah untuk mengenal pasti rekod yang medan yang mengandungi nilai dipisahkan koma termasuk semua rentetan carian yang ditentukan. Contohnya, mencari 'a,b,c' dalam 'a,b,c,d' sepatutnya menghasilkan padanan.
Penyelesaian Unggul:
Daripada merantai berbilang panggilan find_in_set
dengan operator OR
(yang mungkin tidak cekap), kaedah yang lebih berkesan memanfaatkan fungsi FIND_IN_SET
dalam klausa WHERE
yang lebih berstruktur:
<code class="language-sql">WHERE FIND_IN_SET('val1', setcolumn) > 0 AND FIND_IN_SET('val2', setcolumn) > 0 AND FIND_IN_SET('val3', setcolumn) > 0</code>
di mana:
setcolumn
mewakili medan dengan nilai dipisahkan koma.val1
, val2
, val3
, dsb., ialah rentetan carian.Penjelasan:
Pendekatan ini menggunakan AND
untuk memastikan semua rentetan carian terdapat dalam setcolumn
. Setiap panggilan FIND_IN_SET
mengembalikan kedudukan jika rentetan ditemui (nilai lebih besar daripada 0); jika tidak, ia mengembalikan 0. Syarat AND
menjamin bahawa hanya rekod yang mengandungi semua rentetan yang ditentukan dikembalikan.
Contoh:
<code class="language-sql">SELECT * FROM table WHERE FIND_IN_SET('a', setcolumn) > 0 AND FIND_IN_SET('b', setcolumn) > 0 AND FIND_IN_SET('c', setcolumn) > 0;</code>
Pertanyaan ini hanya akan mengembalikan rekod yang setcolumn
mengandungi 'a', 'b' dan 'c'.
Pertimbangan Penting:
Walaupun kaedah ini secara amnya lebih cekap daripada pendekatan REGEXP, ingat bahawa menyimpan nilai yang dipisahkan koma dalam medan pangkalan data sering dianggap reka bentuk pangkalan data yang buruk. Menormalkan pangkalan data anda (membuat jadual berasingan untuk mewakili perhubungan) ialah penyelesaian jangka panjang yang lebih baik untuk prestasi dan integriti data. Pendekatan ini terutamanya penyelesaian untuk data sedia ada yang tidak dinormalkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Berbilang Rentetan dengan Cekap dalam Medan MySQL Dipisahkan Koma?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!