Mencari Rekod dengan Berbilang Nilai dalam Lajur
Dalam pangkalan data hubungan, adalah perkara biasa untuk menyimpan berbilang nilai dalam satu lajur. Walau bagaimanapun, apabila menanyakan data dengan lajur sedemikian, mungkin sukar untuk mengasingkan nilai tertentu. Mari kita terokai senario di mana kita mempunyai jadual dengan lajur "kanak-kanak" yang mengandungi berbilang nama yang dipisahkan dengan koma.
Masalah:
Pertimbangkan jadual berikut:
id | name | children |
---|---|---|
1 | Roberto | Michael,Dia |
2 | Maria | John,Alex |
3 | Mary | Alexandre,Diana |
Objektifnya adalah untuk mencari ibu bapa yang mempunyai anak bernama Alex. Semasa menggunakan "WHERE children = 'Alex'" adalah sesuai, ia gagal kerana berbilang nama dalam setiap sel. Menggunakan "WHERE children LIKE '%Alex%'" mengembalikan padanan tambahan yang tidak berkaitan.
Skema Dinormalkan:
Untuk menangani isu ini, skema jadual boleh dinormalkan dengan membuat meja berasingan untuk kanak-kanak dengan satu baris untuk setiap kanak-kanak. Jadual asal kemudiannya boleh digabungkan dengan jadual anak untuk mencari ibu bapa dengan anak tertentu. Walau bagaimanapun, jika penyelesaian ini tidak boleh dilaksanakan, terdapat alternatif:
Fungsi FIND_IN_SET:
Fungsi MySQL FIND_IN_SET() boleh digunakan untuk menyemak sama ada nilai tertentu terdapat dalam senarai dipisahkan koma. Untuk senario ini, pertanyaannya ialah:
WHERE FIND_IN_SET('Alex', children)
Pertanyaan ini akan mengembalikan baris yang 'Alex' ditemui dalam lajur 'kanak-kanak'.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Rekod dengan Berbilang Nilai dengan Cekap dalam Lajur Pangkalan Data Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!