Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menyertai Jadual dengan Cekap dengan Nilai Dipisahkan Koma dalam Pangkalan Data MySQL?

Bagaimanakah Saya Boleh Menyertai Jadual dengan Cekap dengan Nilai Dipisahkan Koma dalam Pangkalan Data MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-12-27 14:17:16575semak imbas

How Can I Efficiently Join Tables with Comma-Separated Values in a MySQL Database?

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!

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