Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Memaparkan Ketersediaan Kursus Khusus Pengguna dengan Klausa WHERE Bersyarat dalam MySQL?

Bagaimana untuk Memaparkan Ketersediaan Kursus Khusus Pengguna dengan Klausa WHERE Bersyarat dalam MySQL?

Patricia Arquette
Patricia Arquetteasal
2024-11-06 09:38:02391semak imbas

How to Display User-Specific Course Availability with Conditional WHERE Clauses in MySQL?

Menggunakan Klausa WHERE Bersyarat untuk Medan Khusus dalam MySQL

Penerangan Masalah

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.

Keterbatasan dan Penyelesaian MySQL

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.

Penyelesaian Cadangan

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!

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