From 7468bf70cd7c454096fb7c27fc65f312bc312197 Mon Sep 17 00:00:00 2001 From: acanas Date: Fri, 10 Sep 2021 20:22:09 +0200 Subject: [PATCH] Version 20.100: Sep 10, 2021 New module swad_figure_database for database queries related to figures. --- Makefile | 7 +- swad_center_database.c | 8 +- swad_changelog.h | 3 +- swad_course_database.c | 2 +- swad_degree_database.c | 6 +- swad_figure.c | 109 +++---------------------- swad_figure_cache.c | 45 ++-------- swad_institution_database.c | 158 +++++++++++++++++++++++++++++++++++- swad_institution_database.h | 12 +++ 9 files changed, 201 insertions(+), 149 deletions(-) diff --git a/Makefile b/Makefile index 94db7ec16..6340b3405 100644 --- a/Makefile +++ b/Makefile @@ -46,9 +46,10 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \ swad_enrolment.o swad_enrolment_database.o swad_error.o swad_exam.o \ swad_exam_database.o swad_exam_log.o swad_exam_print.o \ swad_exam_result.o swad_exam_session.o swad_exam_set.o \ - swad_figure.o swad_figure_cache.o swad_file.o swad_file_browser.o \ - swad_file_extension.o swad_file_MIME.o swad_firewall.o swad_follow.o \ - swad_follow_database.o swad_form.o swad_forum.o \ + swad_figure.o swad_figure_cache.o swad_figure_database.o swad_file.o \ + swad_file_browser.o swad_file_extension.o swad_file_MIME.o \ + swad_firewall.o swad_follow.o swad_follow_database.o swad_form.o \ + swad_forum.o \ swad_game.o swad_global.o swad_group.o swad_group_database.o \ swad_help.o swad_hierarchy.o swad_hierarchy_config.o swad_holiday.o \ swad_HTML.o \ diff --git a/swad_center_database.c b/swad_center_database.c index c0474da08..7dbbc21ce 100644 --- a/swad_center_database.c +++ b/swad_center_database.c @@ -427,7 +427,8 @@ unsigned Ctr_DB_GetNumCtrsWithDegs (HieLvl_Level_t Scope,long Cod) " FROM ins_instits," "ctr_centers," "deg_degrees" - " WHERE %sinstitutions.InsCod=ctr_centers.InsCod" + " WHERE %s" + "ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod", SubQuery); } @@ -449,7 +450,8 @@ unsigned Ctr_DB_GetNumCtrsWithCrss (HieLvl_Level_t Scope,long Cod) "ctr_centers," "deg_degrees," "crs_courses" - " WHERE %sinstitutions.InsCod=ctr_centers.InsCod" + " WHERE %s" + "ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod", SubQuery); @@ -475,7 +477,7 @@ unsigned Ctr_DB_GetNumCtrsWithUsrs (Rol_Role_t Role, "crs_courses," "crs_users" " WHERE %s" - "institutions.InsCod=ctr_centers.InsCod" + "ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_users.CrsCod" diff --git a/swad_changelog.h b/swad_changelog.h index 0f78385d7..a6a493a56 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. */ -#define Log_PLATFORM_VERSION "SWAD 20.99 (2021-09-10)" +#define Log_PLATFORM_VERSION "SWAD 20.100 (2021-09-10)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.69.1.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 20.100: Sep 10, 2021 New module swad_figure_database for database queries related to figures. (314940 lines) Version 20.99: Sep 10, 2021 Queries moved to module swad_institution_database. (314758 lines) Version 20.98: Sep 10, 2021 New module swad_institution_database for database queries related to institutions. (314663 lines) Version 20.97: Sep 10, 2021 Code refactoring related to scope. (314566 lines) diff --git a/swad_course_database.c b/swad_course_database.c index 1dd684333..8988a55f2 100644 --- a/swad_course_database.c +++ b/swad_course_database.c @@ -372,7 +372,7 @@ unsigned Crs_DB_GetNumCrssWithUsrs (Rol_Role_t Role, "crs_courses," "crs_users" " WHERE %s" - "institutions.InsCod=ctr_centers.InsCod" + "ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_users.CrsCod" diff --git a/swad_degree_database.c b/swad_degree_database.c index f69dc07ff..a3d93c55a 100644 --- a/swad_degree_database.c +++ b/swad_degree_database.c @@ -490,7 +490,8 @@ unsigned Deg_DB_GetNumDegsWithCrss (HieLvl_Level_t Scope,long Cod) "ctr_centers," "deg_degrees," "crs_courses" - " WHERE %sinstitutions.InsCod=ctr_centers.InsCod" + " WHERE %s" + "ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod", SubQuery); @@ -515,7 +516,8 @@ unsigned Deg_DB_GetNumDegsWithUsrs (Rol_Role_t Role, "deg_degrees," "crs_courses," "crs_users" - " WHERE %sinstitutions.InsCod=ctr_centers.InsCod" + " WHERE %s" + "ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_users.CrsCod" diff --git a/swad_figure.c b/swad_figure.c index b72b05781..79b129a16 100644 --- a/swad_figure.c +++ b/swad_figure.c @@ -48,6 +48,7 @@ #include "swad_hierarchy_level.h" #include "swad_HTML.h" #include "swad_institution.h" +#include "swad_institution_database.h" #include "swad_logo.h" #include "swad_message.h" #include "swad_network.h" @@ -1013,40 +1014,16 @@ static void Fig_GetAndShowInssOrderedByNumCtrs (void) switch (Gbl.Scope.Current) { case HieLvl_SYS: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ctr_centers" - " GROUP BY InsCod" - " ORDER BY N DESC"); + NumInss = Ins_DB_GetInssInCurrentSysOrderedByNumberOfCtrs (&mysql_res); break; case HieLvl_CTY: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT ctr_centers.InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ins_instits," - "ctr_centers" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " GROUP BY ctr_centers.InsCod" - " ORDER BY N DESC", - Gbl.Hierarchy.Cty.CtyCod); + NumInss = Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCtrs (&mysql_res); break; case HieLvl_INS: case HieLvl_CTR: case HieLvl_DEG: case HieLvl_CRS: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ctr_centers" - " WHERE InsCod=%ld" - " GROUP BY InsCod" - " ORDER BY N DESC", - Gbl.Hierarchy.Ins.InsCod); + NumInss = Ins_DB_GetInssInCurrentInsOrderedByNumberOfCtrs (&mysql_res); break; default: Err_WrongScopeExit (); @@ -1083,46 +1060,16 @@ static void Fig_GetAndShowInssOrderedByNumDegs (void) switch (Gbl.Scope.Current) { case HieLvl_SYS: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT ctr_centers.InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ctr_centers," - "deg_degrees" - " WHERE ctr_centers.CtrCod=deg_degrees.CtrCod" - " GROUP BY InsCod" - " ORDER BY N DESC"); + NumInss = Ins_DB_GetInssInCurrentSysOrderedByNumberOfDegs (&mysql_res); break; case HieLvl_CTY: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT ctr_centers.InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ins_instits," - "ctr_centers," - "deg_degrees" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " GROUP BY ctr_centers.InsCod" - " ORDER BY N DESC", - Gbl.Hierarchy.Cty.CtyCod); + NumInss = Ins_DB_GetInssInCurrentCtyOrderedByNumberOfDegs (&mysql_res); break; case HieLvl_INS: case HieLvl_CTR: case HieLvl_DEG: case HieLvl_CRS: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT ctr_centers.InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ctr_centers," - "deg_degrees" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " GROUP BY ctr_centers.InsCod" - " ORDER BY N DESC", - Gbl.Hierarchy.Ins.InsCod); + NumInss = Ins_DB_GetInssInCurrentInsOrderedByNumberOfDegs (&mysql_res); break; default: Err_WrongScopeExit (); @@ -1159,52 +1106,16 @@ static void Fig_GetAndShowInssOrderedByNumCrss (void) switch (Gbl.Scope.Current) { case HieLvl_SYS: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT ctr_centers.InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ctr_centers," - "deg_degrees," - "crs_courses" - " WHERE ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " GROUP BY InsCod" - " ORDER BY N DESC"); + NumInss = Ins_DB_GetInssInCurrentSysOrderedByNumberOfCrss (&mysql_res); break; case HieLvl_CTY: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT ctr_centers.InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " GROUP BY ctr_centers.InsCod" - " ORDER BY N DESC", - Gbl.Hierarchy.Cty.CtyCod); + NumInss = Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCrss (&mysql_res); break; case HieLvl_INS: case HieLvl_CTR: case HieLvl_DEG: case HieLvl_CRS: - NumInss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get institutions", - "SELECT ctr_centers.InsCod," // row[0] - "COUNT(*) AS N" // row[1] - " FROM ctr_centers," - "deg_degrees," - "crs_courses" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " GROUP BY ctr_centers.InsCod" - " ORDER BY N DESC", - Gbl.Hierarchy.Ins.InsCod); + NumInss = Ins_DB_GetInssInCurrentInsOrderedByNumberOfCrss (&mysql_res); break; default: Err_WrongScopeExit (); diff --git a/swad_figure_cache.c b/swad_figure_cache.c index a4a91231b..8c74de160 100644 --- a/swad_figure_cache.c +++ b/swad_figure_cache.c @@ -29,6 +29,7 @@ #include "swad_database.h" #include "swad_figure_cache.h" +#include "swad_figure_database.h" #include "swad_scope.h" #include "swad_string.h" @@ -53,7 +54,7 @@ /*****************************************************************************/ /*****************************************************************************/ -/************** Get number of users who have chosen an option ****************/ +/*************************** Update figure into cache ************************/ /*****************************************************************************/ void FigCch_UpdateFigureIntoCache (FigCch_FigureCached_t Figure, @@ -68,34 +69,18 @@ void FigCch_UpdateFigureIntoCache (FigCch_FigureCached_t Figure, switch (Type) { case FigCch_UNSIGNED: - DB_QueryREPLACE ("can not update cached figure value", - "REPLACE INTO fig_figures" - " (Figure,Scope,Cod,ValueInt,ValueDouble)" - " VALUES" - " (%u,'%s',%ld,%u,'0.0')", - (unsigned) Figure, - Sco_GetDBStrFromScope (Scope), - Cod, - *((unsigned *) ValuePtr)); + Fig_DB_UpdateUnsignedFigureIntoCache (Figure,Scope,Cod, + *((unsigned *) ValuePtr)); break; case FigCch_DOUBLE: - Str_SetDecimalPointToUS (); // To write the decimal point as a dot - DB_QueryREPLACE ("can not update cached figure value", - "REPLACE INTO fig_figures" - " (Figure,Scope,Cod,ValueInt,ValueDouble)" - " VALUES" - " (%u,'%s',%ld,0,'%.15lg')", - (unsigned) Figure, - Sco_GetDBStrFromScope (Scope), - Cod, - *((double *) ValuePtr)); - Str_SetDecimalPointToLocal (); // Return to local system + Fig_DB_UpdateDoubleFigureIntoCache (Figure,Scope,Cod, + *((double *) ValuePtr)); break; } } /*****************************************************************************/ -/************** Get number of users who have chosen an option ****************/ +/************************** Get figure from cache ****************************/ /*****************************************************************************/ // Return true is figure is found (if figure is cached and recently updated) @@ -114,11 +99,6 @@ bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure, [HieLvl_DEG] = (time_t) ( 1UL * 60UL * 60UL), // Degree [HieLvl_CRS] = (time_t) ( 60UL), // Course }; - static const char *Field[FigCch_NUM_TYPES] = - { - [FigCch_UNSIGNED] = "ValueInt", - [FigCch_DOUBLE ] = "ValueDouble", - }; MYSQL_RES *mysql_res; MYSQL_ROW row; bool Found = false; @@ -140,16 +120,7 @@ bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure, return false; /***** Get figure's value if cached and recent *****/ - if (DB_QuerySELECT (&mysql_res,"can not get cached figure value", - "SELECT %s" // row[0] - " FROM fig_figures" - " WHERE Figure=%u" - " AND Scope='%s'" - " AND Cod=%ld" - " AND LastUpdate>FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)", - Field[Type], - (unsigned) Figure,Sco_GetDBStrFromScope (Scope),Cod, - TimeCached[Scope])) + if (Fig_DB_GetFigureFromCache (&mysql_res,Figure,Scope,Cod,Type,TimeCached[Scope])) { /* Get row */ row = mysql_fetch_row (mysql_res); diff --git a/swad_institution_database.c b/swad_institution_database.c index ceb024438..5b6496cdc 100644 --- a/swad_institution_database.c +++ b/swad_institution_database.c @@ -297,6 +297,7 @@ unsigned Ins_DB_GetInssInCtyOrderedByFullName (MYSQL_RES **mysql_res,long CtyCod " ORDER BY FullName", CtyCod); } + /*****************************************************************************/ /************* Get full list of institutions **************/ /************* with number of users who claim to belong to them **************/ @@ -346,6 +347,154 @@ unsigned Ins_DB_GetFullListOfInssInCty (MYSQL_RES **mysql_res,long CtyCod) OrderBySubQuery[Gbl.Hierarchy.Inss.SelectedOrder]); } +/*****************************************************************************/ +/**************** Get list of institutions in system ***************/ +/**************** ordered by number of centers/degrees/courses ***************/ +/*****************************************************************************/ + +unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfCtrs (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get institutions", + "SELECT InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ctr_centers" + " GROUP BY InsCod" + " ORDER BY N DESC"); + } + +unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfDegs (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get institutions", + "SELECT ctr_centers.InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ctr_centers," + "deg_degrees" + " WHERE ctr_centers.CtrCod=deg_degrees.CtrCod" + " GROUP BY InsCod" + " ORDER BY N DESC"); + } + +unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfCrss (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get institutions", + "SELECT ctr_centers.InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ctr_centers," + "deg_degrees," + "crs_courses" + " WHERE ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " GROUP BY InsCod" + " ORDER BY N DESC"); + } + +/*****************************************************************************/ +/************ Get list of institutions in current country *******************/ +/************ ordered by number of centers/degrees/courses *******************/ +/*****************************************************************************/ + +unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCtrs (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get institutions", + "SELECT ctr_centers.InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ins_instits," + "ctr_centers" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " GROUP BY ctr_centers.InsCod" + " ORDER BY N DESC", + Gbl.Hierarchy.Cty.CtyCod); + } + +unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfDegs (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get institutions", + "SELECT ctr_centers.InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ins_instits," + "ctr_centers," + "deg_degrees" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " GROUP BY ctr_centers.InsCod" + " ORDER BY N DESC", + Gbl.Hierarchy.Cty.CtyCod); + } + +unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCrss (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get institutions", + "SELECT ctr_centers.InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " GROUP BY ctr_centers.InsCod" + " ORDER BY N DESC", + Gbl.Hierarchy.Cty.CtyCod); + } + +/*****************************************************************************/ +/***** Get current institution and its number of centers/degrees/courses *****/ +/*****************************************************************************/ + +unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfCtrs (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get institutions", + "SELECT InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ctr_centers" + " WHERE InsCod=%ld" + " GROUP BY InsCod", + Gbl.Hierarchy.Ins.InsCod); + } + +unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfDegs (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get institutions", + "SELECT ctr_centers.InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ctr_centers," + "deg_degrees" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " GROUP BY ctr_centers.InsCod" + " ORDER BY N DESC", + Gbl.Hierarchy.Ins.InsCod); + } + +unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfCrss (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (&mysql_res,"can not get institutions", + "SELECT ctr_centers.InsCod," // row[0] + "COUNT(*) AS N" // row[1] + " FROM ctr_centers," + "deg_degrees," + "crs_courses" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " GROUP BY ctr_centers.InsCod" + " ORDER BY N DESC", + Gbl.Hierarchy.Ins.InsCod); + } + /*****************************************************************************/ /**************** Get number of institutions in a country ********************/ /*****************************************************************************/ @@ -375,7 +524,8 @@ unsigned Ins_DB_GetNumInssWithCtrs (HieLvl_Level_t Scope,long Cod) "SELECT COUNT(DISTINCT ins_instits.InsCod)" " FROM ins_instits," "ctr_centers" - " WHERE %sinstitutions.InsCod=ctr_centers.InsCod", + " WHERE %s" + "ins_instits.InsCod=ctr_centers.InsCod", SubQuery); } @@ -395,7 +545,8 @@ unsigned Ins_DB_GetNumInssWithDegs (HieLvl_Level_t Scope,long Cod) " FROM ins_instits," "ctr_centers," "deg_degrees" - " WHERE %sinstitutions.InsCod=ctr_centers.InsCod" + " WHERE %s" + "ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod", SubQuery); } @@ -417,7 +568,8 @@ unsigned Ins_DB_GetNumInssWithCrss (HieLvl_Level_t Scope,long Cod) "ctr_centers," "deg_degrees," "crs_courses" - " WHERE %sinstitutions.InsCod=ctr_centers.InsCod" + " WHERE %s" + "ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod", SubQuery); diff --git a/swad_institution_database.h b/swad_institution_database.h index f5f028b09..29c6ca64c 100644 --- a/swad_institution_database.h +++ b/swad_institution_database.h @@ -61,6 +61,18 @@ unsigned Ins_DB_GetInssInCtyOrderedByShrtName (MYSQL_RES **mysql_res,long CtyCod unsigned Ins_DB_GetInssInCtyOrderedByFullName (MYSQL_RES **mysql_res,long CtyCod); unsigned Ins_DB_GetFullListOfInssInCty (MYSQL_RES **mysql_res,long CtyCod); +unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfCtrs (MYSQL_RES **mysql_res); +unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfDegs (MYSQL_RES **mysql_res); +unsigned Ins_DB_GetInssInCurrentSysOrderedByNumberOfCrss (MYSQL_RES **mysql_res); + +unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCtrs (MYSQL_RES **mysql_res); +unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfDegs (MYSQL_RES **mysql_res); +unsigned Ins_DB_GetInssInCurrentCtyOrderedByNumberOfCrss (MYSQL_RES **mysql_res); + +unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfCtrs (MYSQL_RES **mysql_res); +unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfDegs (MYSQL_RES **mysql_res); +unsigned Ins_DB_GetInssInCurrentInsOrderedByNumberOfCrss (MYSQL_RES **mysql_res); + unsigned Ins_DB_GetNumInssInCty (long CtyCod); unsigned Ins_DB_GetNumInssWithCtrs (HieLvl_Level_t Scope,long Cod);