Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menyertai Jadual dengan Cekap dengan Nilai Dipisahkan Koma dalam Pangkalan Data MySQL?
Sertai Jadual dengan Nilai Dipisahkan Koma dalam Satu Lajur
Apabila berurusan dengan pangkalan data, selalunya perlu untuk menyertai jadual berdasarkan lajur yang mengandungi koma -nilai yang diasingkan. Dalam kes khusus ini, anda cuba mendapatkan nama pengguna di mana lajur yang dipisahkan koma dalam jadual C ("id pengguna") sepadan dengan istilah carian tertentu.
Pertanyaan SQL Menggunakan Pengekstrakan Substring
Pertanyaan awal anda cuba menggunakan subkueri untuk mengekstrak nilai pertama daripada rentetan yang dipisahkan koma dalam jadual C lajur "userids". Walau bagaimanapun, pendekatan ini tidak cekap dan tidak boleh dipercayai kerana ia menganggap bahawa nilai yang diingini sentiasa yang pertama dalam rentetan.
Pertanyaan yang Dipertingkat Menggunakan find_in_set
Penyelesaian yang lebih baik melibatkan penggunaan Fungsi find_in_set MySQL, yang membolehkan anda mencari nilai tertentu dalam dipisahkan koma rentetan:
SELECT * FROM tblC c JOIN tblB b ON (find_in_set(b.userid, c.userids) > 0) WHERE c.nname = "new1"
Pertanyaan ini akan mendapatkan semula semua nama pengguna yang dikaitkan dengan baris dalam jadual C dengan cekap di mana lajur "nname" sepadan dengan "baru1."
Alternatif Skema Biasa
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa menyimpan nilai yang dipisahkan koma dalam lajur bukan amalan yang disyorkan. Untuk integriti dan prestasi data yang lebih baik, adalah lebih baik untuk menormalkan skema dengan memperkenalkan jadual simpang.
Dalam contoh yang disediakan, anda boleh mencipta jadual simpang baharu (tblC_user) dengan dua lajur: c_id (kunci asing ke jadual C) dan id pengguna (kunci asing ke jadual B). Ini akan membolehkan anda mewakili perhubungan banyak-ke-banyak antara jadual C dan B tanpa memerlukan rentetan dipisahkan koma.
Pertanyaan Biasa
Menggunakan rentetan ternormal skema, anda boleh menggunakan pertanyaan berikut untuk mendapatkan semula hasil yang diingini:
SELECT * FROM tblC c JOIN tblC_user cu ON (c.id = cu.c_id) JOIN tblB b ON (b.userid = cu.userid) WHERE c.nname = "new1"
Pertanyaan ini akan menyediakan cara yang lebih cekap dan boleh dipercayai untuk menyertai jadual berdasarkan nilai dipisahkan koma.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyertai Jadual dengan Cekap dengan Nilai Dipisahkan Koma dalam Pangkalan Data MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!