Consulta Cursos activos

Consulta Cursos activos

de David Mesa -
Número de respuestas: 11

Hola buenas tardes, me gustaría saber si existe una consulta que me muestre los cursos activos. Dado que en la plataforma hay cursos inscritos, necesito saber cuales de estos están siendo utilizados activamente y de igual manera identificar los que están en estado de abandono, pienso que sería ideal que al pasar un mes el curso se declare como inactivo.

Les agradeceria su gran ayuda.



Promedio de valoraciones: -
En respuesta a David Mesa

Re: Consulta Cursos activos

de Randy Thornton -

Hola David,

Hay unas consultas para el plugin informes configurables en la página de ad-hoc contributed reports aquí - https://docs.moodle.org/33/en/ad-hoc_contributed_reports#Most_Active_courses. 

La que hice yo allí puede identificar cursos antiguos o abandonados, los nunca usados, los con pocos matriculones, y semejantes.

Quizás una sería útil.



Saludos,

Randy


En respuesta a Randy Thornton

Re: Consulta Cursos activos

de David Mesa -
Hola Randy Thornton pues estoy creando una tabla que me muestre los datos de la siguientes manera:


tengo una tabla que la llamo indicadores es algo así:

| id periodo | Cursos activos | Cursos en total | Docentes Activos | Docentes en total |

| 2017-1       |           ?               |            53             |               23              |           47                  |


Entonces por medio de la consulta de los cursos activos quiero mostrar solo el número de cursos activos, donde esta el signo de pregunta es lo que me falta.

En este momento llevo asi las consulta:

/*Docentes en total y cursos en total*/

 SELECT count( u.id ) as 'DocTotal', 

(SELECT periodo.idperiodo FROM reportes.periodo AS periodo) AS id_periodo, 

(SELECT count( id ) FROM mdl_course AS q WHERE q.id >1) as CvTotal 

FROM mdl_user AS u 

INNER JOIN mdl_role_assignments ra ON ( u.id = ra.userid ) 

INNER JOIN mdl_context ctx ON ( ra.contextid = ctx.id ) 

INNER JOIN mdl_course q ON (ctx.instanceid = q.id ) 

WHERE ctx.contextlevel=50 

AND ra.roleid=3 

/*Docentes activos*/

SELECT COUNT(DISTINCT l.userid) AS DocentesActivos FROM mdl_course AS c 

JOIN mdl_context AS ctx ON ctx.instanceid=c.id 

JOIN mdl_role_assignments AS ra ON ra.contextid = ctx.id 

JOIN mdl_user_lastaccess AS l ON ra.userid = l.userid 

JOIN mdl_course_categories AS cats ON c.category = cats.id 

WHERE c.category=cats.id AND ra.roleid= 3

aunque estoy tratando de fusionar estas dos consultas para que me muestre como te mostré al principio la tabla

| id periodo | Cursos activos | Cursos en total | Docentes Activos | Docentes en total |

| 2017-1       |           ?               |            53             |               23              |           47                  |

 Agradeceria tu gran ayuda.

En respuesta a David Mesa

Re: Consulta Cursos activos

de Randy Thornton -

David,

Pues, le hacen falta cinco columnas y ya hay cuatro consultas funcionales.

Entonces añadiría una de las aquellas consultas de cursos activos a columna dos en una cláusula subselect.

A mí me gusta utilizar cláusulas subselect a menudo cuando una consulta tiene COUNT o DISTINCT o GROUP BY. Para esta forma de consulta, primero pongo andamio de cláusulas subselect y depués las desentrañaré una por una.

Creo que si pondría cada parte (ie columna) en unas subselect, entonces la consulta sería más sencilla.


Randy

En respuesta a Randy Thornton

Re: Consulta Cursos activos

de David Mesa -

Hola Randy gracias por responder, me podrias regalar un pequeño ejemplo de tu idea te lo agradeceria.


En respuesta a David Mesa

Re: Consulta Cursos activos

de Randy Thornton -

David,

Sí por ejemplo, esta consulta tiene 6 partes incluyendo 5 subselects. Cada pieza es sencilla y usa una clausula de COUNT() a agregar los datos. Se puede añadir o eliminar quisieras piezas fácilmente.


SELECT 
COUNT(c.id) AS Cursos_Todos,

(SELECT COUNT(c.id) FROM mdl_course c WHERE c.id > 1 AND c.visible = 1
) AS Cursos_Visibles,

# cursos cambiados hacia durante 30 dias pasados
(SELECT COUNT(c.id) FROM mdl_course c WHERE c.id > 1 AND DATEDIFF( CURRENT_DATE(), FROM_UNIXTIME(c.timemodified) ) <= 30
) AS Cursos_Cambiados_Recientemente,

# cursos vistos (visitados por alguien) durante 30 dias pasados
(SELECT COUNT(DISTINCT lg.courseid)
FROM mdl_logstore_standard_log lg
WHERE lg.courseid > 1
AND lg.action = 'viewed'
AND DATEDIFF( CURRENT_DATE(), FROM_UNIXTIME(lg.timecreated) ) <= 30
) AS Cursos_Vistos_Recientemente,

# total usuarios matriculados como profesor (rol 3)
(SELECT COUNT(DISTINCT ra.userid)
FROM mdl_role_assignments ra
WHERE ra.roleid = 3
) AS Matriculados_Como_Profesores,

# profesores activos durante 30 dias pasados
(SELECT COUNT(DISTINCT u.id)
FROM mdl_role_assignments ra
JOIN prefix_user u ON u.id = ra.userid
WHERE ra.roleid = 3
AND DATEDIFF( CURRENT_DATE(), FROM_UNIXTIME(u.currentlogin) ) <= 30
) AS Matriculados_Como_Profesores_Activos_Recientemente

FROM prefix_course AS c
# menos el curso 1 del sitio
WHERE c.id > 1
En respuesta a Randy Thornton

Re: Consulta Cursos activos

de David Mesa -

Hola Randy te escribo pues necesito de tu ayuda, quiero dejar esta consulta de la siguiente manera:

SELECT period.periodID 

FROM administrador.period AS period AS) periodID, 

(SELECT COUNT(c.id) AS Cursos_en_total,

(SELECT COUNT(DISTINCT lg.courseid) 

      FROM mdl_logstore_standard_log lg

      WHERE lg.courseid > 1 

 AND lg.action = 'viewed'

      AND DATEDIFF( CURRENT_DATE(), FROM_UNIXTIME(lg.timecreated) ) <= 30

) AS Cursos_activos,

(SELECT COUNT(DISTINCT u.id) 

   FROM mdl_role_assignments ra

   JOIN mdl_user u ON u.id = ra.userid

   WHERE ra.roleid = 3

   AND DATEDIFF( CURRENT_DATE(), FROM_UNIXTIME(u.currentlogin) ) <= 30

) AS Docentes_activos,

(SELECT COUNT(DISTINCT ra.userid) 

   FROM mdl_role_assignments ra  

   WHERE ra.roleid = 3 

) AS Total_docentes

FROM mdl_course AS c 

WHERE c.id > 1

pero me arroja el siguiente error: 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS) periodID, 

(SELECT 
COUNT(c.id) AS Cursos_en_total,

# cursos vistos (vi' at line 2 


agradeceria tu gran ayuda si descubres cual es el error para que funcione asi esta consulta.

En respuesta a David Mesa

Re: Consulta Cursos activos

de Carlos Diaz Perez (ESRP) -

De entrada el paréntesis ) detrás del AS sobra, quitalo y pon As periodid

En respuesta a Carlos Diaz Perez (ESRP)

Re: Consulta Cursos activos

de David Mesa -

Hola Carlos gracias por responder, hice lo que me dijiste pero ahora me sale este error:

MySQL ha dicho: Documentación

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS periodID, 

(SELECT COUNT(c.id) AS Cursos_en_total,

(SELECT COUNT(DISTINCT l' at line 3 

Agradeceria si tienes alguna otra idea para corregir este error  pues ya intentado varias cosas y nada :/

Saludos.

En respuesta a David Mesa

Re: Consulta Cursos activos

de Randy Thornton -

Hola David,

No lo entiendo ¿qué es la base de datos 'administrator' y tabla 'period' y de dónde vienen? 

Por supuesto, hay otra base de datos u otra tabla, pero cómo se relacionan?  Creo que la table 'period' debe tiene un campo como 'courseid', por lo cual haces un JOIN entro las dos tablas. De alguna manera, tienen que vincularse.

Randy


En respuesta a Randy Thornton

Re: Consulta Cursos activos

de David Mesa -

Hola Randy gracias por responder, lo que pasa es que estas en lo correcto estoy trabajando con dos bases de datos que son Moodle y administrador, como antes te mostre esta tablita:

| id periodo | Cursos activos | Cursos en total | Docentes Activos | Docentes en total |

| 2017-1       |           6             |            53             |               23              |           47                  |

pues gracias a tu ayuda y tambien de algunos de la comunidad moodle logre ya conseguir que la consulta me arrojara los datos precisos pero ahora lo que quiero hacer es ordenar estos datos que queden en el orden de la tabla que te estoy mostrando por que pues con la consulta que tengo me los arroja en desorden y asi no los puedo subir a mi aplicacion ya que mi tabla de Yii2 no me los acepta asi en desorden los acepta como esta en la tabla de la iamgen, entonces es lo que estoy intentando hacer pero aun no he tenido suerte.

Adjunto Captura.PNG