mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-08 09:45:26 +02:00
Version 20.58: Apr 06, 2021 Optimizations in database selects.
This commit is contained in:
parent
db17a4465c
commit
364b133b28
|
@ -600,13 +600,14 @@ TODO: Salvador Romero Cort
|
||||||
|
|
||||||
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
|
TODO: FIX BUG, URGENT! En las fechas como parámetro Dat_WriteParamsIniEndDates(), por ejemplo al cambiar el color de la gráfica de accesos por día y hora, no se respeta la zona horaria.
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 20.57 (2021-04-05)"
|
#define Log_PLATFORM_VERSION "SWAD 20.58 (2021-04-06)"
|
||||||
#define CSS_FILE "swad20.45.css"
|
#define CSS_FILE "swad20.45.css"
|
||||||
#define JS_FILE "swad20.6.2.js"
|
#define JS_FILE "swad20.6.2.js"
|
||||||
/*
|
/*
|
||||||
TODO: Rename CENTRE to CENTER in help wiki.
|
TODO: Rename CENTRE to CENTER in help wiki.
|
||||||
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
||||||
|
|
||||||
|
Version 20.58: Apr 06, 2021 Optimizations in database selects. (308989 lines)
|
||||||
Version 20.57: Apr 05, 2021 Optimizations in database selects. (309041 lines)
|
Version 20.57: Apr 05, 2021 Optimizations in database selects. (309041 lines)
|
||||||
Version 20.56.1: Apr 04, 2021 Optimizations in database selects. (309252 lines)
|
Version 20.56.1: Apr 04, 2021 Optimizations in database selects. (309252 lines)
|
||||||
Version 20.56: Apr 04, 2021 Optimizations in database selects. (309296 lines)
|
Version 20.56: Apr 04, 2021 Optimizations in database selects. (309296 lines)
|
||||||
|
|
|
@ -3836,6 +3836,42 @@ long DB_QuerySELECTCode (const char *MsgError,
|
||||||
return Cod;
|
return Cod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**** Make a SELECT query for a unique row with one double from database *****/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
double DB_QuerySELECTDouble (const char *MsgError,
|
||||||
|
const char *fmt,...)
|
||||||
|
{
|
||||||
|
MYSQL_RES *mysql_res;
|
||||||
|
MYSQL_ROW row;
|
||||||
|
va_list ap;
|
||||||
|
int NumBytesPrinted;
|
||||||
|
char *Query;
|
||||||
|
double DoubleNum;
|
||||||
|
|
||||||
|
/***** Create query string *****/
|
||||||
|
va_start (ap,fmt);
|
||||||
|
NumBytesPrinted = vasprintf (&Query,fmt,ap);
|
||||||
|
va_end (ap);
|
||||||
|
if (NumBytesPrinted < 0) // -1 if no memory or any other error
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
|
|
||||||
|
/***** Do SELECT query *****/
|
||||||
|
if (DB_QuerySELECTusingQueryStr (Query,&mysql_res,MsgError)) // Row found
|
||||||
|
{
|
||||||
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
DoubleNum = Str_GetDoubleFromStr (row[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DoubleNum = 0.0;
|
||||||
|
|
||||||
|
/***** Free structure that stores the query result *****/
|
||||||
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
|
|
||||||
|
return DoubleNum;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*********** Make a SELECT query from database using query string ************/
|
/*********** Make a SELECT query from database using query string ************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -43,6 +43,8 @@ unsigned long DB_QuerySELECT (MYSQL_RES **mysql_res,const char *MsgError,
|
||||||
const char *fmt,...);
|
const char *fmt,...);
|
||||||
long DB_QuerySELECTCode (const char *MsgError,
|
long DB_QuerySELECTCode (const char *MsgError,
|
||||||
const char *fmt,...);
|
const char *fmt,...);
|
||||||
|
double DB_QuerySELECTDouble (const char *MsgError,
|
||||||
|
const char *fmt,...);
|
||||||
long DB_GetNextCode (MYSQL_RES *mysql_res);
|
long DB_GetNextCode (MYSQL_RES *mysql_res);
|
||||||
unsigned long DB_GetNumRowsTable (const char *Table);
|
unsigned long DB_GetNumRowsTable (const char *Table);
|
||||||
unsigned long DB_QueryCOUNT (const char *MsgError,const char *fmt,...);
|
unsigned long DB_QueryCOUNT (const char *MsgError,const char *fmt,...);
|
||||||
|
|
165
swad_exam.c
165
swad_exam.c
|
@ -2040,110 +2040,91 @@ unsigned Exa_GetNumExams (Hie_Lvl_Level_t Scope)
|
||||||
|
|
||||||
double Exa_GetNumQstsPerCrsExam (Hie_Lvl_Level_t Scope)
|
double Exa_GetNumQstsPerCrsExam (Hie_Lvl_Level_t Scope)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
double NumQstsPerExam;
|
|
||||||
|
|
||||||
/***** Get number of questions per exam from database *****/
|
/***** Get number of questions per exam from database *****/
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Hie_Lvl_SYS:
|
case Hie_Lvl_SYS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
|
return DB_QuerySELECTDouble ("can not get number of questions per exam",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
||||||
" FROM exa_exams,"
|
" FROM exa_exams,"
|
||||||
"exa_set_questions"
|
"exa_set_questions"
|
||||||
" WHERE exa_exams.ExaCod=exa_set_questions.ExaCod"
|
" WHERE exa_exams.ExaCod=exa_set_questions.ExaCod"
|
||||||
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable");
|
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable");
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTY:
|
case Hie_Lvl_CTY:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
|
return DB_QuerySELECTDouble ("can not get number of questions per exam",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
||||||
" FROM ins_instits,"
|
" FROM ins_instits,"
|
||||||
"ctr_centers,"
|
"ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"exa_exams,"
|
"exa_exams,"
|
||||||
"exa_set_questions"
|
"exa_set_questions"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=exa_exams.CrsCod"
|
" AND crs_courses.CrsCod=exa_exams.CrsCod"
|
||||||
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
||||||
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Cty.CtyCod);
|
Gbl.Hierarchy.Cty.CtyCod);
|
||||||
break;
|
|
||||||
case Hie_Lvl_INS:
|
case Hie_Lvl_INS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
|
return DB_QuerySELECTDouble ("can not get number of questions per exam",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
||||||
" FROM ctr_centers,"
|
" FROM ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"exa_exams,"
|
"exa_exams,"
|
||||||
"exa_set_questions"
|
"exa_set_questions"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=exa_exams.CrsCod"
|
" AND crs_courses.CrsCod=exa_exams.CrsCod"
|
||||||
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
||||||
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Ins.InsCod);
|
Gbl.Hierarchy.Ins.InsCod);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTR:
|
case Hie_Lvl_CTR:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
|
return DB_QuerySELECTDouble ("can not get number of questions per exam",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
||||||
" FROM deg_degrees,"
|
" FROM deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"exa_exams,"
|
"exa_exams,"
|
||||||
"exa_set_questions"
|
"exa_set_questions"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=exa_exams.CrsCod"
|
" AND crs_courses.CrsCod=exa_exams.CrsCod"
|
||||||
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
||||||
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Ctr.CtrCod);
|
Gbl.Hierarchy.Ctr.CtrCod);
|
||||||
break;
|
|
||||||
case Hie_Lvl_DEG:
|
case Hie_Lvl_DEG:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
|
return DB_QuerySELECTDouble ("can not get number of questions per exam",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
||||||
" FROM crs_courses,"
|
" FROM crs_courses,"
|
||||||
"exa_exams,"
|
"exa_exams,"
|
||||||
"exa_set_questions"
|
"exa_set_questions"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=exa_exams.CrsCod"
|
" AND crs_courses.CrsCod=exa_exams.CrsCod"
|
||||||
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
||||||
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Deg.DegCod);
|
Gbl.Hierarchy.Deg.DegCod);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CRS:
|
case Hie_Lvl_CRS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per exam",
|
return DB_QuerySELECTDouble ("can not get number of questions per exam",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(exa_set_questions.QstCod) AS NumQsts"
|
||||||
" FROM exa_exams,"
|
" FROM exa_exams,"
|
||||||
"exa_set_questions"
|
"exa_set_questions"
|
||||||
" WHERE exa_exams.Cod=%ld"
|
" WHERE exa_exams.Cod=%ld"
|
||||||
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
" AND exa_exams.ExaCod=exa_set_questions.ExaCod"
|
||||||
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
" GROUP BY exa_set_questions.ExaCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
return 0.0; // Not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Get average number of questions per exam *****/
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
NumQstsPerExam = Str_GetDoubleFromStr (row[0]);
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
return NumQstsPerExam;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
196
swad_figure.c
196
swad_figure.c
|
@ -3895,8 +3895,6 @@ static void Fig_GetAndShowFollowStats (void)
|
||||||
"FollowedCod",
|
"FollowedCod",
|
||||||
"FollowerCod"
|
"FollowerCod"
|
||||||
};
|
};
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
unsigned Fol;
|
unsigned Fol;
|
||||||
unsigned NumUsrsTotal;
|
unsigned NumUsrsTotal;
|
||||||
unsigned NumUsrs;
|
unsigned NumUsrs;
|
||||||
|
@ -4048,122 +4046,116 @@ static void Fig_GetAndShowFollowStats (void)
|
||||||
switch (Gbl.Scope.Current)
|
switch (Gbl.Scope.Current)
|
||||||
{
|
{
|
||||||
case Hie_Lvl_SYS:
|
case Hie_Lvl_SYS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
Average = DB_QuerySELECTDouble ("can not get number of questions"
|
||||||
" per survey",
|
" per survey",
|
||||||
"SELECT AVG(N)" // row[0]
|
"SELECT AVG(N)" // row[0]
|
||||||
" FROM (SELECT COUNT(%s) AS N"
|
" FROM (SELECT COUNT(%s) AS N"
|
||||||
" FROM usr_follow"
|
" FROM usr_follow"
|
||||||
" GROUP BY %s) AS F",
|
" GROUP BY %s) AS F",
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
FieldDB[1 - Fol]);
|
FieldDB[1 - Fol]);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_CTY:
|
case Hie_Lvl_CTY:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
Average = DB_QuerySELECTDouble ("can not get number of questions"
|
||||||
" per survey",
|
" per survey",
|
||||||
"SELECT AVG(N)" // row[0]
|
"SELECT AVG(N)" // row[0]
|
||||||
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
||||||
" FROM ins_instits,"
|
" FROM ins_instits,"
|
||||||
"ctr_centers,"
|
"ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users,"
|
"crs_users,"
|
||||||
"usr_follow"
|
"usr_follow"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.UsrCod=usr_follow.%s"
|
" AND crs_users.UsrCod=usr_follow.%s"
|
||||||
" GROUP BY %s) AS F",
|
" GROUP BY %s) AS F",
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
Gbl.Hierarchy.Cty.CtyCod,
|
Gbl.Hierarchy.Cty.CtyCod,
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
FieldDB[1 - Fol]);
|
FieldDB[1 - Fol]);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_INS:
|
case Hie_Lvl_INS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
Average = DB_QuerySELECTDouble ("can not get number of questions"
|
||||||
" per survey",
|
" per survey",
|
||||||
"SELECT AVG(N)" // row[0]
|
"SELECT AVG(N)" // row[0]
|
||||||
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
||||||
" FROM ctr_centers,"
|
" FROM ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users,"
|
"crs_users,"
|
||||||
"usr_follow"
|
"usr_follow"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.UsrCod=usr_follow.%s"
|
" AND crs_users.UsrCod=usr_follow.%s"
|
||||||
" GROUP BY %s) AS F",
|
" GROUP BY %s) AS F",
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
Gbl.Hierarchy.Ins.InsCod,
|
Gbl.Hierarchy.Ins.InsCod,
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
FieldDB[1 - Fol]);
|
FieldDB[1 - Fol]);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_CTR:
|
case Hie_Lvl_CTR:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
Average = DB_QuerySELECTDouble ("can not get number of questions"
|
||||||
" per survey",
|
" per survey",
|
||||||
"SELECT AVG(N)" // row[0]
|
"SELECT AVG(N)" // row[0]
|
||||||
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
||||||
" FROM deg_degrees,"
|
" FROM deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users,"
|
"crs_users,"
|
||||||
"usr_follow"
|
"usr_follow"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.UsrCod=usr_follow.%s"
|
" AND crs_users.UsrCod=usr_follow.%s"
|
||||||
" GROUP BY %s) AS F",
|
" GROUP BY %s) AS F",
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
Gbl.Hierarchy.Ctr.CtrCod,
|
Gbl.Hierarchy.Ctr.CtrCod,
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
FieldDB[1 - Fol]);
|
FieldDB[1 - Fol]);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_DEG:
|
case Hie_Lvl_DEG:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
Average = DB_QuerySELECTDouble ("can not get number of questions"
|
||||||
" per survey",
|
" per survey",
|
||||||
"SELECT AVG(N)" // row[0]
|
"SELECT AVG(N)" // row[0]
|
||||||
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
||||||
" FROM crs_courses,"
|
" FROM crs_courses,"
|
||||||
"crs_users,"
|
"crs_users,"
|
||||||
"usr_follow"
|
"usr_follow"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.UsrCod=usr_follow.%s"
|
" AND crs_users.UsrCod=usr_follow.%s"
|
||||||
" GROUP BY %s) AS F",
|
" GROUP BY %s) AS F",
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
Gbl.Hierarchy.Deg.DegCod,
|
Gbl.Hierarchy.Deg.DegCod,
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
FieldDB[1 - Fol]);
|
FieldDB[1 - Fol]);
|
||||||
break;
|
break;
|
||||||
case Hie_Lvl_CRS:
|
case Hie_Lvl_CRS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
Average = DB_QuerySELECTDouble ("can not get number of questions"
|
||||||
" per survey",
|
" per survey",
|
||||||
"SELECT AVG(N)" // row[0]
|
"SELECT AVG(N)" // row[0]
|
||||||
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
" FROM (SELECT COUNT(DISTINCT usr_follow.%s) AS N"
|
||||||
" FROM crs_users,"
|
" FROM crs_users,"
|
||||||
"usr_follow"
|
"usr_follow"
|
||||||
" WHERE crs_users.CrsCod=%ld"
|
" WHERE crs_users.CrsCod=%ld"
|
||||||
" AND crs_users.UsrCod=usr_follow.%s"
|
" AND crs_users.UsrCod=usr_follow.%s"
|
||||||
" GROUP BY %s) AS F",
|
" GROUP BY %s) AS F",
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
Gbl.Hierarchy.Crs.CrsCod,
|
Gbl.Hierarchy.Crs.CrsCod,
|
||||||
FieldDB[Fol],
|
FieldDB[Fol],
|
||||||
FieldDB[1 - Fol]);
|
FieldDB[1 - Fol]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
|
Average = 0.0; // Not reached
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Get average *****/
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
Average = Str_GetDoubleFromStr (row[0]);
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
/***** Write number of followed per follower *****/
|
/***** Write number of followed per follower *****/
|
||||||
HTM_TR_Begin (NULL);
|
HTM_TR_Begin (NULL);
|
||||||
|
|
||||||
|
|
165
swad_game.c
165
swad_game.c
|
@ -2817,110 +2817,91 @@ unsigned Gam_GetNumGames (Hie_Lvl_Level_t Scope)
|
||||||
|
|
||||||
double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
|
double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
double NumQstsPerGame;
|
|
||||||
|
|
||||||
/***** Get number of questions per game from database *****/
|
/***** Get number of questions per game from database *****/
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Hie_Lvl_SYS:
|
case Hie_Lvl_SYS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
|
return DB_QuerySELECTDouble ("can not get number of questions per game",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
||||||
" FROM gam_games,"
|
" FROM gam_games,"
|
||||||
"gam_questions"
|
"gam_questions"
|
||||||
" WHERE gam_games.GamCod=gam_questions.GamCod"
|
" WHERE gam_games.GamCod=gam_questions.GamCod"
|
||||||
" GROUP BY gam_questions.GamCod) AS NumQstsTable");
|
" GROUP BY gam_questions.GamCod) AS NumQstsTable");
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTY:
|
case Hie_Lvl_CTY:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
|
return DB_QuerySELECTDouble ("can not get number of questions per game",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
||||||
" FROM ins_instits,"
|
" FROM ins_instits,"
|
||||||
"ctr_centers,"
|
"ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"gam_games,"
|
"gam_games,"
|
||||||
"gam_questions"
|
"gam_questions"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=gam_games.CrsCod"
|
" AND crs_courses.CrsCod=gam_games.CrsCod"
|
||||||
" AND gam_games.GamCod=gam_questions.GamCod"
|
" AND gam_games.GamCod=gam_questions.GamCod"
|
||||||
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Cty.CtyCod);
|
Gbl.Hierarchy.Cty.CtyCod);
|
||||||
break;
|
|
||||||
case Hie_Lvl_INS:
|
case Hie_Lvl_INS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
|
return DB_QuerySELECTDouble ("can not get number of questions per game",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
||||||
" FROM ctr_centers,"
|
" FROM ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"gam_games,"
|
"gam_games,"
|
||||||
"gam_questions"
|
"gam_questions"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=gam_games.CrsCod"
|
" AND crs_courses.CrsCod=gam_games.CrsCod"
|
||||||
" AND gam_games.GamCod=gam_questions.GamCod"
|
" AND gam_games.GamCod=gam_questions.GamCod"
|
||||||
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Ins.InsCod);
|
Gbl.Hierarchy.Ins.InsCod);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTR:
|
case Hie_Lvl_CTR:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
|
return DB_QuerySELECTDouble ("can not get number of questions per game",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
||||||
" FROM deg_degrees,"
|
" FROM deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"gam_games,"
|
"gam_games,"
|
||||||
"gam_questions"
|
"gam_questions"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=gam_games.CrsCod"
|
" AND crs_courses.CrsCod=gam_games.CrsCod"
|
||||||
" AND gam_games.GamCod=gam_questions.GamCod"
|
" AND gam_games.GamCod=gam_questions.GamCod"
|
||||||
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Ctr.CtrCod);
|
Gbl.Hierarchy.Ctr.CtrCod);
|
||||||
break;
|
|
||||||
case Hie_Lvl_DEG:
|
case Hie_Lvl_DEG:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
|
return DB_QuerySELECTDouble ("can not get number of questions per game",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
||||||
" FROM crs_courses,"
|
" FROM crs_courses,"
|
||||||
"gam_games,"
|
"gam_games,"
|
||||||
"gam_questions"
|
"gam_questions"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=gam_games.CrsCod"
|
" AND crs_courses.CrsCod=gam_games.CrsCod"
|
||||||
" AND gam_games.GamCod=gam_questions.GamCod"
|
" AND gam_games.GamCod=gam_questions.GamCod"
|
||||||
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Deg.DegCod);
|
Gbl.Hierarchy.Deg.DegCod);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CRS:
|
case Hie_Lvl_CRS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions per game",
|
return DB_QuerySELECTDouble ("can not get number of questions per game",
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
"SELECT AVG(NumQsts)"
|
||||||
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
" FROM (SELECT COUNT(gam_questions.QstCod) AS NumQsts"
|
||||||
" FROM gam_games,"
|
" FROM gam_games,"
|
||||||
"gam_questions"
|
"gam_questions"
|
||||||
" WHERE gam_games.Cod=%ld"
|
" WHERE gam_games.Cod=%ld"
|
||||||
" AND gam_games.GamCod=gam_questions.GamCod"
|
" AND gam_games.GamCod=gam_questions.GamCod"
|
||||||
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
" GROUP BY gam_questions.GamCod) AS NumQstsTable",
|
||||||
Gbl.Hierarchy.Crs.CrsCod);
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
return 0.0; // Not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Get average number of questions per game *****/
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
NumQstsPerGame = Str_GetDoubleFromStr (row[0]);
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
return NumQstsPerGame;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
193
swad_survey.c
193
swad_survey.c
|
@ -4131,125 +4131,100 @@ unsigned Svy_GetNumCrsSurveys (Hie_Lvl_Level_t Scope,unsigned *NumNotif)
|
||||||
|
|
||||||
double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
|
double Svy_GetNumQstsPerCrsSurvey (Hie_Lvl_Level_t Scope)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
double NumQstsPerSurvey;
|
|
||||||
|
|
||||||
/***** Get number of questions per survey from database *****/
|
/***** Get number of questions per survey from database *****/
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Hie_Lvl_SYS:
|
case Hie_Lvl_SYS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
return DB_QuerySELECTDouble ("can not get number of questions per survey",
|
||||||
" per survey",
|
"SELECT AVG(NumQsts)"
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
||||||
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
" FROM svy_surveys,"
|
||||||
" FROM svy_surveys,"
|
"svy_questions"
|
||||||
"svy_questions"
|
" WHERE svy_surveys.Scope='%s'"
|
||||||
" WHERE svy_surveys.Scope='%s'"
|
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
||||||
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
||||||
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
||||||
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTY:
|
case Hie_Lvl_CTY:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
return DB_QuerySELECTDouble ("can not get number of questions per survey",
|
||||||
" per survey",
|
"SELECT AVG(NumQsts)"
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
||||||
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
" FROM ins_instits,"
|
||||||
" FROM ins_instits,"
|
"ctr_centers,"
|
||||||
"ctr_centers,"
|
"deg_degrees,"
|
||||||
"deg_degrees,"
|
"crs_courses,"
|
||||||
"crs_courses,"
|
"svy_surveys,"
|
||||||
"svy_surveys,"
|
"svy_questions"
|
||||||
"svy_questions"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND crs_courses.CrsCod=svy_surveys.Cod"
|
||||||
" AND crs_courses.CrsCod=svy_surveys.Cod"
|
" AND svy_surveys.Scope='%s'"
|
||||||
" AND svy_surveys.Scope='%s'"
|
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
||||||
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
||||||
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
Gbl.Hierarchy.Cty.CtyCod,
|
||||||
Gbl.Hierarchy.Cty.CtyCod,
|
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
||||||
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
|
||||||
break;
|
|
||||||
case Hie_Lvl_INS:
|
case Hie_Lvl_INS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
return DB_QuerySELECTDouble ("can not get number of questions per survey",
|
||||||
" per survey",
|
"SELECT AVG(NumQsts)"
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
||||||
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
" FROM ctr_centers,"
|
||||||
" FROM ctr_centers,"
|
"deg_degrees,"
|
||||||
"deg_degrees,"
|
"crs_courses,"
|
||||||
"crs_courses,"
|
"svy_surveys,"
|
||||||
"svy_surveys,"
|
"svy_questions"
|
||||||
"svy_questions"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND crs_courses.CrsCod=svy_surveys.Cod"
|
||||||
" AND crs_courses.CrsCod=svy_surveys.Cod"
|
" AND svy_surveys.Scope='%s'"
|
||||||
" AND svy_surveys.Scope='%s'"
|
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
||||||
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
||||||
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
Gbl.Hierarchy.Ins.InsCod,
|
||||||
Gbl.Hierarchy.Ins.InsCod,
|
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
||||||
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTR:
|
case Hie_Lvl_CTR:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
return DB_QuerySELECTDouble ("can not get number of questions per survey",
|
||||||
" per survey",
|
"SELECT AVG(NumQsts)"
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
||||||
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
" FROM deg_degrees,"
|
||||||
" FROM deg_degrees,"
|
"crs_courses,"
|
||||||
"crs_courses,"
|
"svy_surveys,"
|
||||||
"svy_surveys,"
|
"svy_questions"
|
||||||
"svy_questions"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND crs_courses.CrsCod=svy_surveys.Cod"
|
||||||
" AND crs_courses.CrsCod=svy_surveys.Cod"
|
" AND svy_surveys.Scope='%s'"
|
||||||
" AND svy_surveys.Scope='%s'"
|
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
||||||
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
||||||
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
Gbl.Hierarchy.Ctr.CtrCod,
|
||||||
Gbl.Hierarchy.Ctr.CtrCod,
|
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
||||||
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
|
||||||
break;
|
|
||||||
case Hie_Lvl_DEG:
|
case Hie_Lvl_DEG:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
return DB_QuerySELECTDouble ("can not get number of questions per survey",
|
||||||
" per survey",
|
"SELECT AVG(NumQsts)"
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
||||||
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
" FROM crs_courses,"
|
||||||
" FROM crs_courses,"
|
"svy_surveys,"
|
||||||
"svy_surveys,"
|
"svy_questions"
|
||||||
"svy_questions"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" AND crs_courses.CrsCod=svy_surveys.Cod"
|
||||||
" AND crs_courses.CrsCod=svy_surveys.Cod"
|
" AND svy_surveys.Scope='%s'"
|
||||||
" AND svy_surveys.Scope='%s'"
|
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
||||||
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
||||||
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
Gbl.Hierarchy.Deg.DegCod,
|
||||||
Gbl.Hierarchy.Deg.DegCod,
|
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
||||||
Sco_GetDBStrFromScope (Hie_Lvl_CRS));
|
|
||||||
break;
|
|
||||||
case Hie_Lvl_CRS:
|
case Hie_Lvl_CRS:
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of questions"
|
return DB_QuerySELECTDouble ("can not get number of questions per survey",
|
||||||
" per survey",
|
"SELECT AVG(NumQsts)"
|
||||||
"SELECT AVG(NumQsts)" // row[0]
|
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
||||||
" FROM (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
|
" FROM svy_surveys,"
|
||||||
" FROM svy_surveys,"
|
"svy_questions"
|
||||||
"svy_questions"
|
" WHERE svy_surveys.Scope='%s'"
|
||||||
" WHERE svy_surveys.Scope='%s'"
|
" AND svy_surveys.Cod=%ld"
|
||||||
" AND svy_surveys.Cod=%ld"
|
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
||||||
" AND svy_surveys.SvyCod=svy_questions.SvyCod"
|
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
||||||
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
|
Sco_GetDBStrFromScope (Hie_Lvl_CRS),Gbl.Hierarchy.Crs.CrsCod);
|
||||||
Sco_GetDBStrFromScope (Hie_Lvl_CRS),Gbl.Hierarchy.Crs.CrsCod);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
return 0.0; // Not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Get average number of questions per survey *****/
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
NumQstsPerSurvey = Str_GetDoubleFromStr (row[0]);
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
return NumQstsPerSurvey;
|
|
||||||
}
|
}
|
||||||
|
|
502
swad_user.c
502
swad_user.c
|
@ -9708,164 +9708,146 @@ unsigned Usr_GetCachedNumUsrsNotBelongingToAnyCrs (void)
|
||||||
|
|
||||||
static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role)
|
static double Usr_GetNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
double NumCrssPerUsr;
|
|
||||||
|
|
||||||
/***** Get number of courses per user from database *****/
|
/***** Get number of courses per user from database *****/
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Hie_Lvl_SYS:
|
case Hie_Lvl_SYS:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)"
|
||||||
" FROM (SELECT COUNT(CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(CrsCod) AS NumCrss"
|
||||||
" FROM crs_users"
|
" FROM crs_users"
|
||||||
" GROUP BY UsrCod) AS NumCrssTable");
|
" GROUP BY UsrCod) AS NumCrssTable");
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)"
|
||||||
" FROM (SELECT COUNT(CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(CrsCod) AS NumCrss"
|
||||||
" FROM crs_users"
|
" FROM crs_users"
|
||||||
" WHERE Role=%u"
|
" WHERE Role=%u"
|
||||||
" GROUP BY UsrCod) AS NumCrssTable",
|
" GROUP BY UsrCod) AS NumCrssTable",
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTY:
|
case Hie_Lvl_CTY:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)"
|
||||||
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
||||||
" FROM ins_instits,"
|
" FROM ins_instits,"
|
||||||
"ctr_centers,"
|
"ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
||||||
Cod);
|
Cod);
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
||||||
" FROM ins_instits,"
|
" FROM ins_instits,"
|
||||||
"ctr_centers,"
|
"ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.Role=%u"
|
" AND crs_users.Role=%u"
|
||||||
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
||||||
Cod,
|
Cod,
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_INS:
|
case Hie_Lvl_INS:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
||||||
" FROM ctr_centers,"
|
" FROM ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
||||||
Cod);
|
Cod);
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
||||||
" FROM ctr_centers,"
|
" FROM ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.Role=%u"
|
" AND crs_users.Role=%u"
|
||||||
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
||||||
Cod,
|
Cod,
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTR:
|
case Hie_Lvl_CTR:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
||||||
" FROM deg_degrees,"
|
" FROM deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
||||||
Cod);
|
Cod);
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
||||||
" FROM deg_degrees,"
|
" FROM deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.Role=%u"
|
" AND crs_users.Role=%u"
|
||||||
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
||||||
Cod,
|
Cod,
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_DEG:
|
case Hie_Lvl_DEG:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
||||||
" FROM crs_courses,"
|
" FROM crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
||||||
Cod);
|
Cod);
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of courses per user",
|
return DB_QuerySELECTDouble ("can not get number of courses per user",
|
||||||
"SELECT AVG(NumCrss)" // row[0]
|
"SELECT AVG(NumCrss)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
" FROM (SELECT COUNT(crs_users.CrsCod) AS NumCrss"
|
||||||
" FROM crs_courses,"
|
" FROM crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.Role=%u"
|
" AND crs_users.Role=%u"
|
||||||
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
" GROUP BY crs_users.UsrCod) AS NumCrssTable",
|
||||||
Cod,
|
Cod,
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CRS:
|
case Hie_Lvl_CRS:
|
||||||
return 1.0;
|
return 1.0;
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
return 0.0; // Not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Get averga number of courses per user *****/
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
NumCrssPerUsr = Str_GetDoubleFromStr (row[0]);
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
return NumCrssPerUsr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double Usr_GetCachedNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role)
|
double Usr_GetCachedNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role)
|
||||||
|
@ -9898,148 +9880,139 @@ double Usr_GetCachedNumCrssPerUsr (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Rol
|
||||||
|
|
||||||
static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role)
|
static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
double NumUsrsPerCrs;
|
|
||||||
|
|
||||||
/***** Get number of users per course from database *****/
|
/***** Get number of users per course from database *****/
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Hie_Lvl_SYS:
|
case Hie_Lvl_SYS:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(UsrCod) AS NumUsrs"
|
||||||
" FROM crs_users"
|
" FROM crs_users"
|
||||||
" GROUP BY CrsCod) AS NumUsrsTable");
|
" GROUP BY CrsCod) AS NumUsrsTable");
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(UsrCod) AS NumUsrs"
|
||||||
" FROM crs_users"
|
" FROM crs_users"
|
||||||
" WHERE Role=%u GROUP BY CrsCod) AS NumUsrsTable",
|
" WHERE Role=%u GROUP BY CrsCod) AS NumUsrsTable",
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTY:
|
case Hie_Lvl_CTY:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
||||||
" FROM ins_instits,"
|
" FROM ins_instits,"
|
||||||
"ctr_centers,"
|
"ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
||||||
Cod);
|
Cod);
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
||||||
" FROM ins_instits,"
|
" FROM ins_instits,"
|
||||||
"ctr_centers,"
|
"ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE ins_instits.CtyCod=%ld"
|
" WHERE ins_instits.CtyCod=%ld"
|
||||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.Role=%u"
|
" AND crs_users.Role=%u"
|
||||||
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
||||||
Cod,
|
Cod,
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_INS:
|
case Hie_Lvl_INS:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
||||||
" FROM ctr_centers,"
|
" FROM ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
||||||
Cod);
|
Cod);
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
||||||
" FROM ctr_centers,"
|
" FROM ctr_centers,"
|
||||||
"deg_degrees,"
|
"deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE ctr_centers.InsCod=%ld"
|
" WHERE ctr_centers.InsCod=%ld"
|
||||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.Role=%u"
|
" AND crs_users.Role=%u"
|
||||||
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
||||||
Cod,
|
Cod,
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CTR:
|
case Hie_Lvl_CTR:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
||||||
" FROM deg_degrees,"
|
" FROM deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
||||||
Cod);
|
Cod);
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
||||||
" FROM deg_degrees,"
|
" FROM deg_degrees,"
|
||||||
"crs_courses,"
|
"crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE deg_degrees.CtrCod=%ld"
|
" WHERE deg_degrees.CtrCod=%ld"
|
||||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.Role=%u"
|
" AND crs_users.Role=%u"
|
||||||
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
||||||
Cod,
|
Cod,
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_DEG:
|
case Hie_Lvl_DEG:
|
||||||
if (Role == Rol_UNK) // Any user
|
if (Role == Rol_UNK) // Any user
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
||||||
" FROM crs_courses,"
|
" FROM crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
||||||
Cod);
|
Cod);
|
||||||
else
|
else
|
||||||
DB_QuerySELECT (&mysql_res,"can not get number of users per course",
|
return DB_QuerySELECTDouble ("can not get number of users per course",
|
||||||
"SELECT AVG(NumUsrs)" // row[0]
|
"SELECT AVG(NumUsrs)" // row[0]
|
||||||
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
" FROM (SELECT COUNT(crs_users.UsrCod) AS NumUsrs"
|
||||||
" FROM crs_courses,"
|
" FROM crs_courses,"
|
||||||
"crs_users"
|
"crs_users"
|
||||||
" WHERE crs_courses.DegCod=%ld"
|
" WHERE crs_courses.DegCod=%ld"
|
||||||
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
" AND crs_courses.CrsCod=crs_users.CrsCod"
|
||||||
" AND crs_users.Role=%u"
|
" AND crs_users.Role=%u"
|
||||||
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
" GROUP BY crs_users.CrsCod) AS NumUsrsTable",
|
||||||
Cod,
|
Cod,
|
||||||
(unsigned) Role);
|
(unsigned) Role);
|
||||||
break;
|
|
||||||
case Hie_Lvl_CRS:
|
case Hie_Lvl_CRS:
|
||||||
return (double) Usr_GetNumUsrsInCrss (Hie_Lvl_CRS,Cod,
|
return (double) Usr_GetNumUsrsInCrss (Hie_Lvl_CRS,Cod,
|
||||||
Role == Rol_UNK ? 1 << Rol_STD |
|
Role == Rol_UNK ? 1 << Rol_STD |
|
||||||
|
@ -10049,17 +10022,8 @@ static double Usr_GetNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Ro
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Lay_WrongScopeExit ();
|
Lay_WrongScopeExit ();
|
||||||
break;
|
return 0.0; // Not reached
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Get average number of users per course *****/
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
NumUsrsPerCrs = Str_GetDoubleFromStr (row[0]);
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
return NumUsrsPerCrs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double Usr_GetCachedNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role)
|
double Usr_GetCachedNumUsrsPerCrs (Hie_Lvl_Level_t Scope,long Cod,Rol_Role_t Role)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user