Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

225
Vistas
Moodle Complex SQL no funciona

Estoy escribiendo un bloque en PHP para Moodle 3.2 y tengo algunas dificultades con el SQL que no funciona.

Básicamente, quiero obtener los puntajes de las pruebas para todos los usuarios en un curso para todas las pruebas.

Mi SQL funciona en phpMyAdmin

 SELECT u.id, u.firstname, u.lastname, qg.quiz, qg.grade, q.grade as maxgrade, q.name FROM mdl_quiz_grades qg JOIN mdl_user u ON u.id = qg.userid JOIN mdl_quiz q ON q.id = qg.quiz WHERE q.course = 2

Como digo esto trabajando en MySQL: ingrese la descripción de la imagen aquí

Sin embargo aquí está el código PHP en Moodle:

 $sql = " SELECT u.id, u.firstname, u.lastname, qg.quiz, qg.grade, q.grade AS maxgrade, q.name FROM {quiz_grades} qg JOIN {user} u ON u.id = qg.userid JOIN {quiz} q ON q.id = qg.quiz WHERE q.course = ?"; $params = array($COURSE->id);**//NB Course ID is 2** $records = $DB->get_records_sql($sql, $params); print_r($records);

Lo que produce solo los dos registros donde el id de QUIZ también es 2.

 Array ( [5] => stdClass Object ( [id] => 5 [firstname] => Bart [lastname] => Simpson [quiz] => 2 [grade] => 5.00000 [maxgrade] => 10.00000 [name] => Quiz 2 ) [6] => stdClass Object ( [id] => 6 [firstname] => Lisa [lastname] => Simpson [quiz] => 2 [grade] => 5.00000 [maxgrade] => 10.00000 [name] => Quiz 2 ) )

No tengo claro dónde me equivoqué, pero también por qué obtengo dos resultados diferentes

Cualquier consejo recibido con alegría,

Muchas gracias

dave

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Cuando utiliza cualquiera de las funciones $DB->get_records* de Moodle, los resultados se devuelven como una matriz, indexada por el primer campo recuperado .

Entonces, en este caso, la matriz será indexada por el ID de usuario, por lo que solo habrá 2 registros, ya que solo hay 2 ID de usuario diferentes.

Si desea utilizar las funciones $DB->get_records*, deberá asegurarse de que el primer campo sea único (p. ej., 'qg.id').

Alternativamente, puede usar $DB->get_recordset_sql(), que luego le permitirá iterar a través de los resultados, sin preocuparse por las identificaciones duplicadas.

Antes de escribir más código de Moodle, active la depuración del desarrollador , ya que eso le habría dado un mensaje de advertencia en esta situación.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda