Rumah > Artikel > pangkalan data > Bolehkah saya Mengehadkan Klausa WHERE kepada Medan Khusus dalam MySQL?
Bolehkah Klausa WHERE Dibataskan kepada Medan Tertentu dalam MySQL?
Dalam MySQL, klausa WHERE menapis baris berdasarkan syarat yang ditetapkan. Walau bagaimanapun, adalah tidak mungkin untuk mengehadkan penggunaan klausa WHERE kepada medan tertentu dalam pertanyaan.
Memahami Masalah
Dalam konteks soalan, matlamatnya adalah untuk memaparkan senarai kursus yang tersedia dan status pendaftaran pengguna yang berkaitan. Setiap baris mewakili kursus dan menunjukkan status pendaftaran (penggunaHabilitado) untuk pengguna tertentu. Walau bagaimanapun, ID pengguna pengguna mesti diambil daripada URL dan digunakan untuk menapis hasil bagi pengguna khusus tersebut.
Penyelesaian: Mengeksploitasi Kumpulan Bukan Penuh Oleh
Sebelum MySQL 5.7, MySQL membenarkan kumpulan bukan penuh oleh, yang bermaksud fungsi agregat seperti group_concat boleh digunakan dengan lajur tidak teragregat (NON AGGS). Walau bagaimanapun, bermula dengan MySQL 5.7, tetapan ONLY_FULL_GROUP_BY didayakan secara lalai, tidak membenarkan pertanyaan sedemikian.
Dalam kes ini, pertanyaan cuba menambah userHabilitado pada senarai lajur yang dipaparkan, yang sudah dikumpulkan mengikut kursor .cursoID. Walau bagaimanapun, nilai userHabilitado yang dipaparkan tidak ditapis oleh klausa WHERE dan dengan itu memaparkan nilai pertama yang ditemui untuk pengguna itu, tanpa mengira kursus.
Penyelesaian: Melumpuhkan Kumpulan Bukan Penuh Oleh
Satu penyelesaian adalah untuk melumpuhkan ONLY_FULL_GROUP_BY untuk pertanyaan khusus dengan menggunakan pengubah suai SQL_CALC_FOUND_ROWS:
<code class="sql">SET SQL_CALC_FOUND_ROWS = 0;</code>
Walau bagaimanapun, ini tidak disyorkan kerana ia boleh memperkenalkan potensi percanggahan dalam hasil dan harus digunakan dengan berhati-hati.
Atas ialah kandungan terperinci Bolehkah saya Mengehadkan Klausa WHERE kepada Medan Khusus dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!