Dalam pangkalan data MySQL dengan berbilang jadual untuk pelajar, kursus dan pendaftaran, matlamatnya adalah untuk memaparkan senarai kursus yang tersedia di mana pelajar boleh mendaftar. Keperluan adalah untuk menunjukkan medan userHabilitado hanya untuk pengguna tertentu, memastikan nilai dikaitkan dengan betul dengan kursus yang sepadan. Walau bagaimanapun, pertanyaan semasa mengembalikan nilai userHabilitado yang salah.
Sebelum MySQL 5.7, tingkah laku lalai membenarkan kumpulan bukan PENUH mengikut pertanyaan, di mana beberapa tidak diagregatkan (NON AGGS ) lajur boleh disertakan di luar kumpulan mengikut klausa. Walau bagaimanapun, dalam MySQL 5.7 dan lebih baru, tetapan ONLY_FULL_GROUP_BY didayakan secara lalai. Ini memerlukan semua NON AGGS untuk menjadi sebahagian daripada kumpulan mengikut klausa, atau ralat akan berlaku.
Dalam pertanyaan yang diberikan, medan userHabilitado disertakan dalam kumpulan oleh, tetapi klausa WHERE menapis berdasarkan keseluruhan jadual cursos dan bukannya pengguna tertentu. Untuk membetulkannya, MySQL tidak membenarkan klausa WHERE bersyarat dalam kumpulan mengikut medan.
Untuk menyelesaikan pengehadan ini, adalah disyorkan untuk menggunakan subquery untuk menapis jadual cursos berdasarkan pengguna tertentu dan kemudian sertai hasilnya dengan pertanyaan utama. Ini memastikan bahawa medan userHabilitado dinilai hanya untuk pengguna yang dipilih:
<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, ( SELECT userHabilitado FROM cursosUsuarios WHERE cursosUsuarios.userID = 70 AND cursosUsuarios.cursoID = cursos.cursoID ) AS 'ok', GROUP_CONCAT(cursosUsuarios.userID SEPARATOR ',') AS 'usuarios' FROM cursos LEFT JOIN cursosUsuarios ON cursos.cursoID = cursosUsuarios.cursoID LEFT JOIN usuarios ON cursosUsuarios.userID = usuarios.userID WHERE cursos.estadoCurso='abierto' GROUP BY cursos.cursoID;</code>
Dalam subkueri, jadual cursosUsuarios ditapis untuk mendapatkan semula nilai userHabilitado untuk pengguna tertentu (dalam kes ini, 70) dan cursoID yang sepadan. Nilai ini kemudiannya digabungkan dengan pertanyaan utama, memastikan medan penggunaHabilitado yang betul dikaitkan dengan kursus yang sepadan.
Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Ketersediaan Kursus Khusus Pengguna dengan Klausa WHERE Bersyarat dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!