Moodle obtener elemento de retroalimentación
Cuando intento obtener los elementos de retroalimentación, solo recibo la primera columna, ¿por qué?
SELECT
u.firstname as "Usuario",
CASE WHEN i.name = 'task 1' THEN v.value END AS "1",
CASE WHEN i.name = 'task 2' THEN v.value END AS "2",
CASE WHEN i.name = 'task 3' THEN v.value END AS "3",
CASE WHEN i.name = 'task 4' THEN v.value END AS "4",
CASE WHEN i.name = 'task 5' THEN v.value END AS "5",
CASE WHEN i.name = 'task 6' THEN v.value END AS "6",
CASE WHEN i.name = 'task 7' THEN v.value END AS "7",
CASE WHEN i.name = 'task 8' THEN v.value END AS "8",
CASE WHEN i.name = 'task 9' THEN v.value END AS "9",
CASE WHEN i.name = 'task 10' THEN v.value END AS "10",
CASE WHEN i.name = 'task 11' THEN v.value END AS "11",
CASE WHEN i.name = 'task 12' THEN v.value END AS "12"
FROM prefix_feedback AS f
JOIN prefix_course AS c ON c.id=f.course
JOIN prefix_feedback_item AS i ON f.id=i.feedback
JOIN prefix_feedback_completed AS fc ON f.id=fc.feedback
LEFT JOIN prefix_feedback_value AS v ON v.completed=fc.id AND v.item=i.id
JOIN prefix_user AS u ON fc.userid=u.id
GROUP BY u.firstname
ORDER BY u.id, i.id, i.name
y cuando elimino la cláusula “GROUP BY”, obtengo todas las columnas pero en muchas filas.
davy.ai
La razón por la que solo estás recibiendo la primera columna cuando usas
GROUP BY u.firstname
es porque estás agrupando los resultados por el nombre de pila del usuario. Por lo tanto, la consulta solo devuelve una fila para cada nombre de pila único y selecciona el valor del primer elemento para cada tarea. Si eliminas la cláusulaGROUP BY
, obtendrás todas las columnas, pero habrá varias filas para cada usuario, y cada fila mostrará el valor de una sola tarea.