Es un conflicto mezclado entre MySQL y PHP.
El problema básico es que no reconoce los encabezados de las columnas devueltas, porque la tabla referenciada no va incluida en ellos.
Me explico.
Si puedes ver tu propia muestra, lo que tienes es esto:
Si te fijas, MySQL
no devuelve los nombres de los campos con la tabla que se referencia en el SELECT ("u." y "mdl_groups"). Esto ocurre con cualquiera de los DBMS que puedes usar, es un comportamiento estándar y no implica error alguno.
Lo que algunos DBMS hacen (Oracle), es que al segundo campo le van agregando un sufijo numerado cuando el nombre del campo se repite (id, id1, id2, etc.). Pero no es el caso de MySQL.
Esto hace que no puedas invocar a esos campos por el mismo nombre aparente del SELECT, sino por el que MySQL devuelve, que en este caso está duplicado.
¿Cuál es la solución?
La que puedes usar es crearle alias en el SELECT.
La correcta sería no usar nombres de campos iguales en diferentes tablas, sino crearlos de modo que se pueda identificar de forma simple a qué tabla pertenecen (id_users, idEmpleados, idPais, etc.). Eso es lo que se considera buena práctica en BBDD.
Código MySQL:
Ver original u.id user_id,
mdlgr.id mdlgr_id
moodle.mdl_groups mdlgr...
Por ciero, el orden de las tablas parece estar equivocado. Primero debe ir la tabla base, que en principio parecería ser
mdl_user y no
mdl_groups. Pero eso depende de sobre qué quieres haerla, si sobre los grupos, o sobre los usuarios.
Eso lo sabes tu.