Rumah > Artikel > pangkalan data > Bagaimana untuk Memaparkan Medan dalam Klausa WHERE dengan GROUP BY dalam MySQL?
Masalah Awal:
Dalam MySQL, anda tidak dapat memaparkan data medan jadual pangkalan data dalam klausa WHERE pertanyaan apabila medan lain yang tidak disertakan dalam klausa WHERE juga terdapat dalam klausa GROUP BY pertanyaan. Khususnya:
<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, cursosUsuarios.userHabilitado 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>
Penyelesaian Cadangan:
Malangnya, had ini tidak boleh diatasi secara langsung dalam MySQL. Walau bagaimanapun, terdapat strategi alternatif untuk mencapai hasil yang diingini:
Buat subkueri untuk mendapatkan semula data medan yang dikehendaki:
<code class="sql">SELECT userID, userHabilitado FROM cursosUsuarios WHERE userID = 70</code>
Kemudian, sertai subkueri ini dengan pertanyaan utama menggunakan medan yang sesuai:
<code class="sql">SELECT cursos.cursoID AS idcurso, cursos.estadoCurso, (SELECT userHabilitado FROM cursosUsuarios WHERE userID = 70) AS 'userHabilitado', 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>
Rumuskan semula pertanyaan menggunakan pertanyaan bersarang:
<code class="sql">SELECT idcurso, estadoCurso, 'userHabilitado' FROM ( SELECT cursoID AS idcurso, estadoCurso, userHabilitado FROM cursos LEFT JOIN cursosUsuarios ON cursos.cursoID = cursosUsuarios.cursoID WHERE cursos.estadoCurso='abierto' GROUP BY cursoID ) AS subquery WHERE userHabilitado = 1;</code>
Kedua-dua penyelesaian ini membolehkan anda memaparkan data medan userHabilitado untuk pengguna tertentu dalam klausa WHERE sambil memasukkan medan lain dalam klausa GROUP BY.
Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Medan dalam Klausa WHERE dengan GROUP BY dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!