Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mencari Berbilang Rentetan dengan Cekap dalam Medan MySQL Dipisahkan Koma?

Bagaimanakah Saya Boleh Mencari Berbilang Rentetan dengan Cekap dalam Medan MySQL Dipisahkan Koma?

Barbara Streisand
Barbara Streisandasal
2025-01-11 19:31:43829semak imbas

How Can I Efficiently Search for Multiple Strings in a Comma-Separated MySQL Field?

MySQL: Pendekatan yang Lebih Cekap untuk Carian_dalam_set Berbilang Rentetan

Fungsi

MySQL 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn