Version 21.52.2: Nov 06, 2021 Query refactoring related to SELECT DISTINCT and UNION.

This commit is contained in:
acanas 2021-11-06 12:13:05 +01:00
parent 2e61500a79
commit e07963d8b1
42 changed files with 326 additions and 252 deletions

View File

@ -2916,7 +2916,8 @@ int swad__getAttendanceUsers (struct soap *soap,
// Event for one or more groups // Event for one or more groups
// Subquery: list of users in groups of this attendance event... // Subquery: list of users in groups of this attendance event...
// ...who have no entry in attendance list of users // ...who have no entry in attendance list of users
sprintf (SubQuery,"SELECT DISTINCT grp_users.UsrCod AS UsrCod," // row[0] sprintf (SubQuery,"SELECT DISTINCT "
"grp_users.UsrCod AS UsrCod," // row[0]
"'N' AS Present" // row[1] "'N' AS Present" // row[1]
" FROM att_groups," " FROM att_groups,"
"grp_groups," "grp_groups,"
@ -4208,10 +4209,11 @@ static int API_GetTstQuestions (struct soap *soap,
Qst_AnswerType_t AnswerType; Qst_AnswerType_t AnswerType;
/***** Get recent test questions from database *****/ /***** Get recent test questions from database *****/
// DISTINCTROW is necessary to not repeat questions // DISTINCT is necessary to not repeat questions
NumRows = (unsigned) NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get test questions", DB_QuerySELECT (&mysql_res,"can not get test questions",
"SELECT DISTINCTROW tst_questions.QstCod," // row[0] "SELECT DISTINCT "
"tst_questions.QstCod," // row[0]
"tst_questions.AnsType," // row[1] "tst_questions.AnsType," // row[1]
"tst_questions.Shuffle," // row[2] "tst_questions.Shuffle," // row[2]
"tst_questions.Stem," // row[3] "tst_questions.Stem," // row[3]
@ -4567,7 +4569,7 @@ int swad__getTrivialQuestion (struct soap *soap,
Str_SetDecimalPointToUS (); // To print the floating point as a dot Str_SetDecimalPointToUS (); // To print the floating point as a dot
NumRows = (unsigned) NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get test questions", DB_QuerySELECT (&mysql_res,"can not get test questions",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"tst_questions.QstCod," // row[0] "tst_questions.QstCod," // row[0]
"tst_questions.AnsType," // row[1] "tst_questions.AnsType," // row[1]
"tst_questions.Shuffle," // row[2] "tst_questions.Shuffle," // row[2]
@ -6058,14 +6060,16 @@ int swad__getLastLocation (struct soap *soap,
if (DB_QueryEXISTS ("can not check if you can see user location", if (DB_QueryEXISTS ("can not check if you can see user location",
"SELECT EXISTS" "SELECT EXISTS"
"(SELECT *" "(SELECT *"
" FROM (SELECT DISTINCT deg_degrees.CtrCod" " FROM (SELECT DISTINCT "
"deg_degrees.CtrCod"
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees" "deg_degrees"
" WHERE crs_users.UsrCod=%ld" " WHERE crs_users.UsrCod=%ld"
" AND crs_users.CrsCod=crs_courses.CrsCod" " AND crs_users.CrsCod=crs_courses.CrsCod"
" AND crs_courses.DegCod=deg_degrees.DegCod) AS C1," // centers of my courses " AND crs_courses.DegCod=deg_degrees.DegCod) AS C1," // centers of my courses
"(SELECT DISTINCT deg_degrees.CtrCod" "(SELECT DISTINCT "
"deg_degrees.CtrCod"
" FROM crs_users," " FROM crs_users,"
"crs_courses," "crs_courses,"
"deg_degrees" "deg_degrees"

View File

@ -182,7 +182,8 @@ unsigned ID_DB_GetUsrCodsFromUsrID (MYSQL_RES **mysql_res,
// or if password in database is empty (new user) // or if password in database is empty (new user)
NumUsrs = (unsigned) NumUsrs = (unsigned)
DB_QuerySELECT (mysql_res,"can not get user's codes", DB_QuerySELECT (mysql_res,"can not get user's codes",
"SELECT DISTINCT(usr_ids.UsrCod)" "SELECT DISTINCT "
"usr_ids.UsrCod"
" FROM usr_ids," " FROM usr_ids,"
"usr_data" "usr_data"
" WHERE usr_ids.UsrID IN (%s)" " WHERE usr_ids.UsrID IN (%s)"
@ -198,7 +199,8 @@ unsigned ID_DB_GetUsrCodsFromUsrID (MYSQL_RES **mysql_res,
else else
NumUsrs = (unsigned) NumUsrs = (unsigned)
DB_QuerySELECT (mysql_res,"can not get user's codes", DB_QuerySELECT (mysql_res,"can not get user's codes",
"SELECT DISTINCT(UsrCod)" "SELECT DISTINCT "
"UsrCod"
" FROM usr_ids" " FROM usr_ids"
" WHERE UsrID IN (%s)" " WHERE UsrID IN (%s)"
"%s", "%s",

View File

@ -464,7 +464,8 @@ unsigned Agd_DB_GetNumEvents (HieLvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of events", DB_QueryCOUNT ("can not get number of events",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM (SELECT DISTINCT crs_users.UsrCod" " FROM (SELECT DISTINCT "
"crs_users.UsrCod"
" FROM ins_instits," " FROM ins_instits,"
"ctr_centers," "ctr_centers,"
"deg_degrees," "deg_degrees,"
@ -482,7 +483,8 @@ unsigned Agd_DB_GetNumEvents (HieLvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of events", DB_QueryCOUNT ("can not get number of events",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM (SELECT DISTINCT crs_users.UsrCod" " FROM (SELECT DISTINCT "
"crs_users.UsrCod"
" FROM ctr_centers," " FROM ctr_centers,"
"deg_degrees," "deg_degrees,"
"crs_courses," "crs_courses,"
@ -498,7 +500,8 @@ unsigned Agd_DB_GetNumEvents (HieLvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of events", DB_QueryCOUNT ("can not get number of events",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM (SELECT DISTINCT crs_users.UsrCod" " FROM (SELECT DISTINCT "
"crs_users.UsrCod"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"crs_users" "crs_users"
@ -512,7 +515,8 @@ unsigned Agd_DB_GetNumEvents (HieLvl_Level_t Scope)
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of events", DB_QueryCOUNT ("can not get number of events",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM (SELECT DISTINCT crs_users.UsrCod" " FROM (SELECT DISTINCT "
"crs_users.UsrCod"
" FROM crs_courses," " FROM crs_courses,"
"crs_users" "crs_users"
" WHERE crs_courses.DegCod=%ld" " WHERE crs_courses.DegCod=%ld"

View File

@ -484,7 +484,8 @@ unsigned Asg_DB_GetUsrsFromAssignmentExceptMe (MYSQL_RES **mysql_res,long AsgCod
" AND asg_assignments.CrsCod=crs_users.CrsCod" " AND asg_assignments.CrsCod=crs_users.CrsCod"
" AND crs_users.UsrCod<>%ld)" " AND crs_users.UsrCod<>%ld)"
" UNION " " UNION "
"(SELECT DISTINCT grp_users.UsrCod" "(SELECT DISTINCT "
"grp_users.UsrCod"
" FROM asg_groups," " FROM asg_groups,"
"grp_users" "grp_users"
" WHERE asg_groups.AsgCod=%ld" " WHERE asg_groups.AsgCod=%ld"

View File

@ -338,7 +338,8 @@ long Brw_DB_GetPublisherOfSubtree (const char *Path)
/***** Get all common files that are equal to full path (including filename) /***** Get all common files that are equal to full path (including filename)
or that are under that full path from database *****/ or that are under that full path from database *****/
return DB_QuerySELECTCode ("can not get publishers of files", return DB_QuerySELECTCode ("can not get publishers of files",
"SELECT DISTINCT(PublisherUsrCod)" "SELECT DISTINCT "
"PublisherUsrCod"
" FROM brw_files" " FROM brw_files"
" WHERE FileBrowser=%u" " WHERE FileBrowser=%u"
" AND Cod=%ld" " AND Cod=%ld"

View File

@ -89,7 +89,8 @@ unsigned Ctr_DB_GetListOfCtrsInCurrentIns (MYSQL_RES **mysql_res)
{ {
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get centers", DB_QuerySELECT (mysql_res,"can not get centers",
"SELECT DISTINCT CtrCod," // row[0] "SELECT DISTINCT "
"CtrCod," // row[0]
"ShortName" // row[1] "ShortName" // row[1]
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
@ -171,7 +172,8 @@ unsigned Ctr_DB_GetListOfCtrsFullWithNumUsrs (MYSQL_RES **mysql_res,
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" AND CtrCod NOT IN" " AND CtrCod NOT IN"
" (SELECT DISTINCT CtrCod" " (SELECT DISTINCT "
"CtrCod"
" FROM usr_data))" " FROM usr_data))"
" ORDER BY %s", " ORDER BY %s",
InsCod, InsCod,

View File

@ -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. TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/ */
#define Log_PLATFORM_VERSION "SWAD 21.52.1 (2021-11-06)" #define Log_PLATFORM_VERSION "SWAD 21.52.2 (2021-11-06)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.69.1.js" #define JS_FILE "swad20.69.1.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 21.52.2: Nov 06, 2021 Query refactoring related to SELECT DISTINCT and UNION. (321899 lines)
Version 21.52.1: Nov 06, 2021 Fixed database query in departments. (321828 lines) Version 21.52.1: Nov 06, 2021 Fixed database query in departments. (321828 lines)
Version 21.52: Nov 05, 2021 Changed SELECT COUNT to SELECT EXISTS in some queries. (321833 lines) Version 21.52: Nov 05, 2021 Changed SELECT COUNT to SELECT EXISTS in some queries. (321833 lines)
Version 21.51: Nov 04, 2021 Eliminated the limit of origin courses in messages. (321735 lines) Version 21.51: Nov 04, 2021 Eliminated the limit of origin courses in messages. (321735 lines)

View File

@ -361,7 +361,7 @@ unsigned Con_DB_GetConnectedFromCurrentLocation (MYSQL_RES **mysql_res,Rol_Role_
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get list of connected users" DB_QuerySELECT (mysql_res,"can not get list of connected users"
" who belong to this location", " who belong to this location",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_connected.UsrCod," // row[0] "usr_connected.UsrCod," // row[0]
"usr_connected.LastCrsCod," // row[1] "usr_connected.LastCrsCod," // row[1]
"UNIX_TIMESTAMP()-" "UNIX_TIMESTAMP()-"
@ -376,7 +376,7 @@ unsigned Con_DB_GetConnectedFromCurrentLocation (MYSQL_RES **mysql_res,Rol_Role_
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get list of connected users" DB_QuerySELECT (mysql_res,"can not get list of connected users"
" who belong to this location", " who belong to this location",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_connected.UsrCod," // row[0] "usr_connected.UsrCod," // row[0]
"usr_connected.LastCrsCod," // row[1] "usr_connected.LastCrsCod," // row[1]
"UNIX_TIMESTAMP()-" "UNIX_TIMESTAMP()-"
@ -401,7 +401,7 @@ unsigned Con_DB_GetConnectedFromCurrentLocation (MYSQL_RES **mysql_res,Rol_Role_
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get list of connected users" DB_QuerySELECT (mysql_res,"can not get list of connected users"
" who belong to this location", " who belong to this location",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_connected.UsrCod," // row[0] "usr_connected.UsrCod," // row[0]
"usr_connected.LastCrsCod," // row[1] "usr_connected.LastCrsCod," // row[1]
"UNIX_TIMESTAMP()-" "UNIX_TIMESTAMP()-"
@ -424,7 +424,7 @@ unsigned Con_DB_GetConnectedFromCurrentLocation (MYSQL_RES **mysql_res,Rol_Role_
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get list of connected users" DB_QuerySELECT (mysql_res,"can not get list of connected users"
" who belong to this location", " who belong to this location",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_connected.UsrCod," // row[0] "usr_connected.UsrCod," // row[0]
"usr_connected.LastCrsCod," // row[1] "usr_connected.LastCrsCod," // row[1]
"UNIX_TIMESTAMP()-" "UNIX_TIMESTAMP()-"
@ -445,7 +445,7 @@ unsigned Con_DB_GetConnectedFromCurrentLocation (MYSQL_RES **mysql_res,Rol_Role_
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get list of connected users" DB_QuerySELECT (mysql_res,"can not get list of connected users"
" who belong to this location", " who belong to this location",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_connected.UsrCod," // row[0] "usr_connected.UsrCod," // row[0]
"usr_connected.LastCrsCod," // row[1] "usr_connected.LastCrsCod," // row[1]
"UNIX_TIMESTAMP()-" "UNIX_TIMESTAMP()-"
@ -513,7 +513,8 @@ void Con_DB_RemoveOldConnected (void)
DB_QueryDELETE ("can not remove old users from list of connected users", DB_QueryDELETE ("can not remove old users from list of connected users",
"DELETE FROM usr_connected" "DELETE FROM usr_connected"
" WHERE UsrCod NOT IN" " WHERE UsrCod NOT IN"
" (SELECT DISTINCT(UsrCod)" " (SELECT DISTINCT "
"UsrCod"
" FROM ses_sessions)"); " FROM ses_sessions)");
} }

View File

@ -220,7 +220,8 @@ unsigned Cty_DB_GetCtysFull (MYSQL_RES **mysql_res)
"0 AS NumUsrs" // row[...] "0 AS NumUsrs" // row[...]
" FROM cty_countrs" " FROM cty_countrs"
" WHERE CtyCod NOT IN" " WHERE CtyCod NOT IN"
" (SELECT DISTINCT CtyCod" " (SELECT DISTINCT "
"CtyCod"
" FROM usr_data))" " FROM usr_data))"
" ORDER BY %s", " ORDER BY %s",
SubQueryNam1,SubQueryWWW1, SubQueryNam1,SubQueryWWW1,

View File

@ -279,7 +279,8 @@ unsigned Crs_DB_GetOldCrss (MYSQL_RES **mysql_res,unsigned long SecondsWithoutAc
" FROM crs_last" " FROM crs_last"
" WHERE LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)" " WHERE LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)"
" AND CrsCod NOT IN" " AND CrsCod NOT IN"
" (SELECT DISTINCT CrsCod" " (SELECT DISTINCT "
"CrsCod"
" FROM crs_users)", " FROM crs_users)",
SecondsWithoutAccess); SecondsWithoutAccess);
} }

View File

@ -435,7 +435,7 @@ unsigned Deg_DB_GetDegsWithStds (MYSQL_RES **mysql_res)
{ {
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get degrees with students", DB_QuerySELECT (mysql_res,"can not get degrees with students",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"deg_degrees.DegCod," // row[0] "deg_degrees.DegCod," // row[0]
"deg_degrees.CtrCod," // row[1] "deg_degrees.CtrCod," // row[1]
"deg_degrees.DegTypCod," // row[2] "deg_degrees.DegTypCod," // row[2]

View File

@ -109,7 +109,8 @@ unsigned Dpt_DB_GetListDepartments (MYSQL_RES **mysql_res,
" FROM dpt_departments" " FROM dpt_departments"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" AND DptCod NOT IN" " AND DptCod NOT IN"
" (SELECT DISTINCT usr_data.DptCod" " (SELECT DISTINCT "
"usr_data.DptCod"
" FROM usr_data,crs_users" " FROM usr_data,crs_users"
" WHERE crs_users.Role IN (%u,%u)" " WHERE crs_users.Role IN (%u,%u)"
" AND crs_users.UsrCod=usr_data.UsrCod))" " AND crs_users.UsrCod=usr_data.UsrCod))"
@ -149,7 +150,8 @@ unsigned Dpt_DB_GetDataOfDepartmentByCod (MYSQL_RES **mysql_res,long DptCod)
" FROM dpt_departments" " FROM dpt_departments"
" WHERE DptCod=%ld" " WHERE DptCod=%ld"
" AND DptCod NOT IN" " AND DptCod NOT IN"
" (SELECT DISTINCT usr_data.DptCod" " (SELECT DISTINCT "
"usr_data.DptCod"
" FROM usr_data," " FROM usr_data,"
"crs_users" "crs_users"
" WHERE crs_users.Role=%u" " WHERE crs_users.Role=%u"

View File

@ -81,20 +81,19 @@ unsigned Dup_DB_GetUsrsSimilarTo (MYSQL_RES **mysql_res,const struct UsrData *Us
UsrDat->FrstName[0]) // Name and surname 1 not empty UsrDat->FrstName[0]) // Name and surname 1 not empty
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get similar users", DB_QuerySELECT (mysql_res,"can not get similar users",
"SELECT DISTINCT UsrCod" "SELECT DISTINCT "
" FROM (SELECT DISTINCT UsrCod" "UsrCod"
" FROM usr_ids" " FROM usr_ids"
" WHERE UsrID IN" " WHERE UsrID IN"
" (SELECT UsrID" " (SELECT UsrID"
" FROM usr_ids" " FROM usr_ids"
" WHERE UsrCod=%ld)" " WHERE UsrCod=%ld)"
" UNION" " UNION DISTINCT"
" SELECT UsrCod" " SELECT UsrCod"
" FROM usr_data" " FROM usr_data"
" WHERE Surname1='%s'" " WHERE Surname1='%s'"
" AND Surname2='%s'" " AND Surname2='%s'"
" AND FirstName='%s')" " AND FirstName='%s'",
" AS U",
UsrDat->UsrCod, UsrDat->UsrCod,
UsrDat->Surname1, UsrDat->Surname1,
UsrDat->Surname2, UsrDat->Surname2,
@ -102,7 +101,8 @@ unsigned Dup_DB_GetUsrsSimilarTo (MYSQL_RES **mysql_res,const struct UsrData *Us
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get similar users", DB_QuerySELECT (mysql_res,"can not get similar users",
"SELECT DISTINCT UsrCod" "SELECT DISTINCT "
"UsrCod"
" FROM usr_ids" " FROM usr_ids"
" WHERE UsrID IN" " WHERE UsrID IN"
" (SELECT UsrID" " (SELECT UsrID"

View File

@ -668,7 +668,8 @@ unsigned Enr_DB_GetNumUsrsNotBelongingToAnyCrs (void)
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM usr_data" " FROM usr_data"
" WHERE UsrCod NOT IN" " WHERE UsrCod NOT IN"
" (SELECT DISTINCT(UsrCod)" " (SELECT DISTINCT "
"UsrCod"
" FROM crs_users)"); " FROM crs_users)");
} }

View File

@ -2234,7 +2234,8 @@ unsigned Exa_DB_GetAllUsrsWhoHaveMadeExam (MYSQL_RES **mysql_res,long ExaCod)
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get users in exam", DB_QuerySELECT (mysql_res,"can not get users in exam",
"SELECT users.UsrCod" // row[0] "SELECT users.UsrCod" // row[0]
" FROM (SELECT DISTINCT exa_prints.UsrCod AS UsrCod" " FROM (SELECT DISTINCT "
"exa_prints.UsrCod AS UsrCod"
" FROM exa_prints," " FROM exa_prints,"
"exa_sessions," "exa_sessions,"
"exa_exams" "exa_exams"

View File

@ -119,14 +119,19 @@ unsigned Fol_DB_GetUsrsToFollow (unsigned MaxUsrsToShow,
// Get only users with surname 1 and first name // Get only users with surname 1 and first name
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get users to follow", DB_QuerySELECT (mysql_res,"can not get users to follow",
"SELECT DISTINCT UsrCod FROM" "SELECT DISTINCT "
"UsrCod"
" FROM"
" (" " ("
/***** Likely known users *****/ /***** Likely known users *****/
"(SELECT DISTINCT UsrCod FROM" "(SELECT DISTINCT "
"UsrCod"
" FROM"
" (" " ("
// 1. Users followed by my followed // 1. Users followed by my followed
"(" "("
"SELECT DISTINCT usr_follow.FollowedCod AS UsrCod" "SELECT DISTINCT "
"usr_follow.FollowedCod AS UsrCod"
" FROM usr_follow," " FROM usr_follow,"
"(SELECT FollowedCod" "(SELECT FollowedCod"
" FROM usr_follow" " FROM usr_follow"
@ -142,7 +147,8 @@ unsigned Fol_DB_GetUsrsToFollow (unsigned MaxUsrsToShow,
" UNION " " UNION "
// 2. Users who share any course with me // 2. Users who share any course with me
"(" "("
"SELECT DISTINCT crs_users.UsrCod" "SELECT DISTINCT "
"crs_users.UsrCod"
" FROM crs_users," " FROM crs_users,"
"(SELECT CrsCod" "(SELECT CrsCod"
" FROM crs_users" " FROM crs_users"
@ -158,7 +164,8 @@ unsigned Fol_DB_GetUsrsToFollow (unsigned MaxUsrsToShow,
" UNION " " UNION "
// 3. Users who share any course with me with another role // 3. Users who share any course with me with another role
"(" "("
"SELECT DISTINCT crs_users.UsrCod" "SELECT DISTINCT "
"crs_users.UsrCod"
" FROM crs_users," " FROM crs_users,"
"(SELECT CrsCod,Role" "(SELECT CrsCod,Role"
" FROM crs_users" " FROM crs_users"

View File

@ -374,7 +374,8 @@ unsigned For_DB_GetPublishersInThreadExceptMe (MYSQL_RES **mysql_res,long PstCod
{ {
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get publishers in thread", DB_QuerySELECT (mysql_res,"can not get publishers in thread",
"SELECT DISTINCT(UsrCod)" "SELECT DISTINCT "
"UsrCod"
" FROM for_posts" " FROM for_posts"
" WHERE ThrCod=(SELECT ThrCod" " WHERE ThrCod=(SELECT ThrCod"
" FROM for_posts" " FROM for_posts"

View File

@ -743,7 +743,8 @@ unsigned Gam_DB_GetTstTagsPresentInAGame (MYSQL_RES **mysql_res,long GamCod)
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get tags present in a match result", DB_QuerySELECT (mysql_res,"can not get tags present in a match result",
"SELECT tst_tags.TagTxt" // row[0] "SELECT tst_tags.TagTxt" // row[0]
" FROM (SELECT DISTINCT(tst_question_tags.TagCod)" " FROM (SELECT DISTINCT "
"tst_question_tags.TagCod"
" FROM tst_question_tags,gam_questions" " FROM tst_question_tags,gam_questions"
" WHERE gam_questions.GamCod=%ld" " WHERE gam_questions.GamCod=%ld"
" AND gam_questions.QstCod=tst_question_tags.QstCod) AS TagsCods," " AND gam_questions.QstCod=tst_question_tags.QstCod) AS TagsCods,"

View File

@ -300,7 +300,8 @@ unsigned Grp_DB_CountNumUsrsInNoGrpsOfType (Rol_Role_t Role,long GrpTypCod)
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND Role=%u" " AND Role=%u"
" AND UsrCod NOT IN" " AND UsrCod NOT IN"
" (SELECT DISTINCT grp_users.UsrCod" " (SELECT DISTINCT "
"grp_users.UsrCod"
" FROM grp_groups," " FROM grp_groups,"
"grp_users" "grp_users"
" WHERE grp_groups.GrpTypCod=%ld" " WHERE grp_groups.GrpTypCod=%ld"

View File

@ -174,7 +174,8 @@ unsigned Hld_DB_GetListHolidays (MYSQL_RES **mysql_res,Hld_Order_t SelectedOrder
" FROM hld_holidays" " FROM hld_holidays"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" AND PlcCod NOT IN" " AND PlcCod NOT IN"
"(SELECT DISTINCT PlcCod" "(SELECT DISTINCT "
"PlcCod"
" FROM plc_places" " FROM plc_places"
" WHERE InsCod=%ld))" " WHERE InsCod=%ld))"
" ORDER BY %s", " ORDER BY %s",
@ -216,7 +217,8 @@ unsigned Hld_DB_GetDataOfHolidayByCod (MYSQL_RES **mysql_res,long HldCod)
" WHERE HldCod=%ld" " WHERE HldCod=%ld"
" AND InsCod=%ld" " AND InsCod=%ld"
" AND PlcCod NOT IN" " AND PlcCod NOT IN"
"(SELECT DISTINCT PlcCod" "(SELECT DISTINCT "
"PlcCod"
" FROM plc_places" " FROM plc_places"
" WHERE InsCod=%ld))", " WHERE InsCod=%ld))",
HldCod, HldCod,

View File

@ -96,7 +96,7 @@ unsigned Ind_DB_GetTableOfCourses (MYSQL_RES **mysql_res,
if (Indicators->DegTypCod > 0) if (Indicators->DegTypCod > 0)
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"deg_degrees.FullName," // row[0] "deg_degrees.FullName," // row[0]
"crs_courses.FullName," // row[1] "crs_courses.FullName," // row[1]
"crs_courses.CrsCod," // row[2] "crs_courses.CrsCod," // row[2]
@ -119,7 +119,7 @@ unsigned Ind_DB_GetTableOfCourses (MYSQL_RES **mysql_res,
else else
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"deg_degrees.FullName," // row[0] "deg_degrees.FullName," // row[0]
"crs_courses.FullName," // row[1] "crs_courses.FullName," // row[1]
"crs_courses.CrsCod," // row[2] "crs_courses.CrsCod," // row[2]
@ -171,7 +171,7 @@ unsigned Ind_DB_GetTableOfCourses (MYSQL_RES **mysql_res,
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"deg_degrees.FullName," // row[0] "deg_degrees.FullName," // row[0]
"crs_courses.FullName," // row[1] "crs_courses.FullName," // row[1]
"crs_courses.CrsCod," // row[2] "crs_courses.CrsCod," // row[2]
@ -217,7 +217,7 @@ unsigned Ind_DB_GetTableOfCourses (MYSQL_RES **mysql_res,
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"deg_degrees.FullName," // row[0] "deg_degrees.FullName," // row[0]
"crs_courses.FullName," // row[1] "crs_courses.FullName," // row[1]
"crs_courses.CrsCod," // row[2] "crs_courses.CrsCod," // row[2]
@ -259,7 +259,7 @@ unsigned Ind_DB_GetTableOfCourses (MYSQL_RES **mysql_res,
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"deg_degrees.FullName," // row[0] "deg_degrees.FullName," // row[0]
"crs_courses.FullName," // row[1] "crs_courses.FullName," // row[1]
"crs_courses.CrsCod," // row[2] "crs_courses.CrsCod," // row[2]
@ -297,7 +297,7 @@ unsigned Ind_DB_GetTableOfCourses (MYSQL_RES **mysql_res,
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"deg_degrees.FullName," // row[0] "deg_degrees.FullName," // row[0]
"crs_courses.FullName," // row[1] "crs_courses.FullName," // row[1]
"crs_courses.CrsCod," // row[2] "crs_courses.CrsCod," // row[2]
@ -335,7 +335,7 @@ unsigned Ind_DB_GetTableOfCourses (MYSQL_RES **mysql_res,
if (Indicators->DptCod >= 0) // 0 means another department if (Indicators->DptCod >= 0) // 0 means another department
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get courses", DB_QuerySELECT (mysql_res,"can not get courses",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"deg_degrees.FullName," // row[0] "deg_degrees.FullName," // row[0]
"crs_courses.FullName," // row[1] "crs_courses.FullName," // row[1]
"crs_courses.CrsCod," // row[2] "crs_courses.CrsCod," // row[2]

View File

@ -273,7 +273,8 @@ unsigned Ins_DB_GetInssInCtyOrderedByShrtName (MYSQL_RES **mysql_res,long CtyCod
{ {
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get institutions", DB_QuerySELECT (mysql_res,"can not get institutions",
"SELECT DISTINCT InsCod," // row[0] "SELECT DISTINCT "
"InsCod," // row[0]
"ShortName" // row[1] "ShortName" // row[1]
" FROM ins_instits" " FROM ins_instits"
" WHERE CtyCod=%ld" " WHERE CtyCod=%ld"
@ -343,7 +344,8 @@ unsigned Ins_DB_GetFullListOfInssInCty (MYSQL_RES **mysql_res,long CtyCod)
" FROM ins_instits" " FROM ins_instits"
" WHERE CtyCod=%ld" " WHERE CtyCod=%ld"
" AND InsCod NOT IN" " AND InsCod NOT IN"
" (SELECT DISTINCT InsCod" " (SELECT DISTINCT "
"InsCod"
" FROM usr_data))" " FROM usr_data))"
" ORDER BY %s", " ORDER BY %s",
CtyCod, CtyCod,

View File

@ -1017,7 +1017,8 @@ unsigned Mch_DB_GetUsrsWhoHavePlayedGam (MYSQL_RES **mysql_res,long GamCod)
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get users in game", DB_QuerySELECT (mysql_res,"can not get users in game",
"SELECT users.UsrCod" "SELECT users.UsrCod"
" FROM (SELECT DISTINCT mch_results.UsrCod AS UsrCod" " FROM (SELECT DISTINCT "
"mch_results.UsrCod AS UsrCod"
" FROM mch_results," " FROM mch_results,"
"mch_matches," "mch_matches,"
"gam_games" "gam_games"

View File

@ -266,7 +266,8 @@ unsigned Msg_DB_GetDistinctCrssInMyRcvMsgs (MYSQL_RES **mysql_res)
{ {
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get distinct courses in your messages", DB_QuerySELECT (mysql_res,"can not get distinct courses in your messages",
"SELECT DISTINCT crs_courses.CrsCod," // row[0] "SELECT DISTINCT "
"crs_courses.CrsCod," // row[0]
"crs_courses.ShortName" // row[1] "crs_courses.ShortName" // row[1]
" FROM msg_rcv," " FROM msg_rcv,"
"msg_snt," "msg_snt,"
@ -286,7 +287,8 @@ unsigned Msg_DB_GetDistinctCrssInMySntMsgs (MYSQL_RES **mysql_res)
{ {
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get distinct courses in your messages", DB_QuerySELECT (mysql_res,"can not get distinct courses in your messages",
"SELECT DISTINCT crs_courses.CrsCod," // row[0] "SELECT DISTINCT "
"crs_courses.CrsCod," // row[0]
"crs_courses.ShortName" // row[1] "crs_courses.ShortName" // row[1]
" FROM msg_snt," " FROM msg_snt,"
"crs_courses" "crs_courses"
@ -486,7 +488,8 @@ unsigned Msg_DB_GetSntOrRcvMsgs (MYSQL_RES **mysql_res,
case Msg_SENT: case Msg_SENT:
if (FilterFromToSubquery[0]) if (FilterFromToSubquery[0])
{ {
if (asprintf (&SubQuery,"(SELECT DISTINCT msg_snt.MsgCod" if (asprintf (&SubQuery,"(SELECT DISTINCT "
"msg_snt.MsgCod"
" FROM msg_snt," " FROM msg_snt,"
"msg_rcv," "msg_rcv,"
"usr_data" "usr_data"
@ -496,7 +499,8 @@ unsigned Msg_DB_GetSntOrRcvMsgs (MYSQL_RES **mysql_res,
" AND msg_rcv.UsrCod=usr_data.UsrCod" " AND msg_rcv.UsrCod=usr_data.UsrCod"
"%s)" "%s)"
" UNION " " UNION "
"(SELECT DISTINCT msg_snt.MsgCod" "(SELECT DISTINCT "
"msg_snt.MsgCod"
" FROM msg_snt," " FROM msg_snt,"
"msg_rcv_deleted," "msg_rcv_deleted,"
"usr_data" "usr_data"
@ -1372,7 +1376,8 @@ void Msg_DB_MoveUnusedMsgsContentToDeleted (void)
" (SELECT MsgCod" " (SELECT MsgCod"
" FROM msg_snt)" " FROM msg_snt)"
" AND MsgCod NOT IN" " AND MsgCod NOT IN"
" (SELECT DISTINCT MsgCod" " (SELECT DISTINCT "
"MsgCod"
" FROM msg_rcv)"); " FROM msg_rcv)");
/* Messages in msg_content_deleted older than a certain time /* Messages in msg_content_deleted older than a certain time
@ -1385,7 +1390,8 @@ void Msg_DB_MoveUnusedMsgsContentToDeleted (void)
" (SELECT MsgCod" " (SELECT MsgCod"
" FROM msg_snt)" " FROM msg_snt)"
" AND MsgCod NOT IN" " AND MsgCod NOT IN"
" (SELECT DISTINCT MsgCod" " (SELECT DISTINCT "
"MsgCod"
" FROM msg_rcv)"); " FROM msg_rcv)");
} }

View File

@ -451,7 +451,8 @@ unsigned Ntf_DB_GetUsrsWhoMustBeNotified (MYSQL_RES **mysql_res)
// !(Status & (Ntf_STATUS_BIT_READ | Ntf_STATUS_BIT_REMOVED)) // !(Status & (Ntf_STATUS_BIT_READ | Ntf_STATUS_BIT_REMOVED))
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get users who must be notified", DB_QuerySELECT (mysql_res,"can not get users who must be notified",
"SELECT DISTINCT ToUsrCod" "SELECT DISTINCT "
"ToUsrCod"
" FROM ntf_notifications" " FROM ntf_notifications"
" WHERE TimeNotif<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)" " WHERE TimeNotif<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)"
" AND (Status & %u)<>0" " AND (Status & %u)<>0"

View File

@ -226,7 +226,8 @@ unsigned Pho_DB_QueryDegrees (MYSQL_RES **mysql_res,
long Pho_DB_GetADegWithStdsNotInTableOfComputedDegs (void) long Pho_DB_GetADegWithStdsNotInTableOfComputedDegs (void)
{ {
return DB_QuerySELECTCode ("can not get degree", return DB_QuerySELECTCode ("can not get degree",
"SELECT DISTINCT deg_degrees.DegCod" "SELECT DISTINCT "
"deg_degrees.DegCod"
" FROM deg_degrees," " FROM deg_degrees,"
"crs_courses," "crs_courses,"
"crs_users" "crs_users"
@ -234,7 +235,8 @@ long Pho_DB_GetADegWithStdsNotInTableOfComputedDegs (void)
" AND crs_courses.CrsCod=crs_users.CrsCod" " AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u" " AND crs_users.Role=%u"
" AND deg_degrees.DegCod NOT IN" " AND deg_degrees.DegCod NOT IN"
" (SELECT DISTINCT DegCod" " (SELECT DISTINCT "
"DegCod"
" FROM sta_degrees)" " FROM sta_degrees)"
" LIMIT 1", " LIMIT 1",
(unsigned) Rol_STD); (unsigned) Rol_STD);

View File

@ -115,7 +115,8 @@ unsigned Plc_DB_GetListPlaces (MYSQL_RES **mysql_res,Plc_Order_t SelectedOrder)
" FROM plc_places" " FROM plc_places"
" WHERE InsCod=%ld" " WHERE InsCod=%ld"
" AND PlcCod NOT IN" " AND PlcCod NOT IN"
" (SELECT DISTINCT PlcCod" " (SELECT DISTINCT "
"PlcCod"
" FROM ctr_centers" " FROM ctr_centers"
" WHERE InsCod=%ld))" " WHERE InsCod=%ld))"
" ORDER BY %s", " ORDER BY %s",
@ -150,7 +151,8 @@ unsigned Plc_DB_GetDataOfPlaceByCod (MYSQL_RES **mysql_res,long PlcCod)
" FROM plc_places" " FROM plc_places"
" WHERE PlcCod=%ld" " WHERE PlcCod=%ld"
" AND PlcCod NOT IN" " AND PlcCod NOT IN"
" (SELECT DISTINCT PlcCod" " (SELECT DISTINCT "
"PlcCod"
" FROM ctr_centers))", " FROM ctr_centers))",
PlcCod, PlcCod,
PlcCod, PlcCod,

View File

@ -302,7 +302,7 @@ unsigned Prf_DB_GetRankingFigure (MYSQL_RES **mysql_res,const char *FieldName)
case HieLvl_CTY: case HieLvl_CTY:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.%s" // row[1] "usr_figures.%s" // row[1]
" FROM ins_instits," " FROM ins_instits,"
@ -331,7 +331,7 @@ unsigned Prf_DB_GetRankingFigure (MYSQL_RES **mysql_res,const char *FieldName)
case HieLvl_INS: case HieLvl_INS:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.%s" // row[1] "usr_figures.%s" // row[1]
" FROM ctr_centers," " FROM ctr_centers,"
@ -358,7 +358,7 @@ unsigned Prf_DB_GetRankingFigure (MYSQL_RES **mysql_res,const char *FieldName)
case HieLvl_CTR: case HieLvl_CTR:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.%s" // row[1] "usr_figures.%s" // row[1]
" FROM deg_degrees," " FROM deg_degrees,"
@ -383,7 +383,7 @@ unsigned Prf_DB_GetRankingFigure (MYSQL_RES **mysql_res,const char *FieldName)
case HieLvl_DEG: case HieLvl_DEG:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.%s" // row[1] "usr_figures.%s" // row[1]
" FROM crs_courses," " FROM crs_courses,"
@ -406,7 +406,7 @@ unsigned Prf_DB_GetRankingFigure (MYSQL_RES **mysql_res,const char *FieldName)
case HieLvl_CRS: case HieLvl_CRS:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.%s" // row[1] "usr_figures.%s" // row[1]
" FROM crs_users," " FROM crs_users,"
@ -456,7 +456,7 @@ unsigned Prf_DB_GetRankingClicksPerDay (MYSQL_RES **mysql_res)
case HieLvl_CTY: case HieLvl_CTY:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1] "usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1]
@ -484,7 +484,7 @@ unsigned Prf_DB_GetRankingClicksPerDay (MYSQL_RES **mysql_res)
case HieLvl_INS: case HieLvl_INS:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1] "usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1]
@ -510,7 +510,7 @@ unsigned Prf_DB_GetRankingClicksPerDay (MYSQL_RES **mysql_res)
case HieLvl_CTR: case HieLvl_CTR:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1] "usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1]
@ -534,7 +534,7 @@ unsigned Prf_DB_GetRankingClicksPerDay (MYSQL_RES **mysql_res)
case HieLvl_DEG: case HieLvl_DEG:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1] "usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1]
@ -556,7 +556,7 @@ unsigned Prf_DB_GetRankingClicksPerDay (MYSQL_RES **mysql_res)
case HieLvl_CRS: case HieLvl_CRS:
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get ranking", DB_QuerySELECT (mysql_res,"can not get ranking",
"SELECT DISTINCTROW " "SELECT DISTINCT "
"usr_figures.UsrCod," // row[0] "usr_figures.UsrCod," // row[0]
"usr_figures.NumClicks/(DATEDIFF(NOW()," "usr_figures.NumClicks/(DATEDIFF(NOW(),"
"usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1] "usr_figures.FirstClickTime)+1) AS NumClicksPerDay" // row[1]

View File

@ -435,9 +435,10 @@ unsigned Qst_DB_GetQstsForNewTestPrint (MYSQL_RES **mysql_res,
/* Begin query */ /* Begin query */
// Reject questions with any tag hidden // Reject questions with any tag hidden
// Select only questions with tags // Select only questions with tags
// DISTINCTROW is necessary to not repeat questions // DISTINCT is necessary to not repeat questions
snprintf (Query,Qst_MAX_BYTES_QUERY_QUESTIONS + 1, snprintf (Query,Qst_MAX_BYTES_QUERY_QUESTIONS + 1,
"SELECT DISTINCTROW tst_questions.QstCod," // row[0] "SELECT DISTINCT "
"tst_questions.QstCod," // row[0]
"tst_questions.AnsType," // row[1] "tst_questions.AnsType," // row[1]
"tst_questions.Shuffle" // row[2] "tst_questions.Shuffle" // row[2]
" FROM tst_questions,tst_question_tags,tst_tags" " FROM tst_questions,tst_question_tags,tst_tags"

View File

@ -93,7 +93,7 @@ unsigned Rol_DB_GetRolesInAllCrss (MYSQL_RES **mysql_res,long UsrCod)
{ {
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get user's roles in all courses", DB_QuerySELECT (mysql_res,"can not get user's roles in all courses",
"SELECT DISTINCT(Role)" // row[0] "SELECT DISTINCT Role" // row[0]
" FROM crs_users" " FROM crs_users"
" WHERE UsrCod=%ld", " WHERE UsrCod=%ld",
UsrCod); UsrCod);

View File

@ -81,10 +81,10 @@ unsigned Sta_DB_GetHits (MYSQL_RES **mysql_res,
Str_Copy (SubQueryCountType,"COUNT(*)",sizeof (SubQueryCountType) - 1); Str_Copy (SubQueryCountType,"COUNT(*)",sizeof (SubQueryCountType) - 1);
break; break;
case Sta_DISTINCT_USRS: case Sta_DISTINCT_USRS:
sprintf (SubQueryCountType,"COUNT(DISTINCT(%s.UsrCod))",LogTable); sprintf (SubQueryCountType,"COUNT(DISTINCT %s.UsrCod)",LogTable);
break; break;
case Sta_CLICKS_PER_USR: case Sta_CLICKS_PER_USR:
sprintf (SubQueryCountType,"COUNT(*)/GREATEST(COUNT(DISTINCT(%s.UsrCod)),1)+0.000000",LogTable); sprintf (SubQueryCountType,"COUNT(*)/GREATEST(COUNT(DISTINCT %s.UsrCod),1)+0.000000",LogTable);
break; break;
case Sta_GENERATION_TIME: case Sta_GENERATION_TIME:
sprintf (SubQueryCountType,"(AVG(%s.TimeToGenerate)/1E6)+0.000000",LogTable); sprintf (SubQueryCountType,"(AVG(%s.TimeToGenerate)/1E6)+0.000000",LogTable);

View File

@ -659,7 +659,8 @@ unsigned Svy_DB_GetUsrsFromSurveyExceptMe (MYSQL_RES **mysql_res,long SvyCod)
" AND crs_users.UsrCod<>%ld" " AND crs_users.UsrCod<>%ld"
" AND (svy_surveys.Roles&(1<<crs_users.Role))<>0)" " AND (svy_surveys.Roles&(1<<crs_users.Role))<>0)"
" UNION " " UNION "
"(SELECT DISTINCT grp_users.UsrCod" "(SELECT DISTINCT "
"grp_users.UsrCod"
" FROM svy_groups," " FROM svy_groups,"
"grp_users," "grp_users,"
"svy_surveys," "svy_surveys,"

View File

@ -333,7 +333,8 @@ void Tag_DB_RemoveUnusedTagsFromCrs (long CrsCod)
"DELETE FROM tst_tags" "DELETE FROM tst_tags"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" AND TagCod NOT IN" " AND TagCod NOT IN"
" (SELECT DISTINCT tst_question_tags.TagCod" " (SELECT DISTINCT "
"tst_question_tags.TagCod"
" FROM tst_questions," " FROM tst_questions,"
"tst_question_tags" "tst_question_tags"
" WHERE tst_questions.CrsCod=%ld" " WHERE tst_questions.CrsCod=%ld"

View File

@ -376,7 +376,8 @@ unsigned Tst_DB_GetTagsPresentInAPrint (MYSQL_RES **mysql_res,long PrnCod)
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get tags present in a test", DB_QuerySELECT (mysql_res,"can not get tags present in a test",
"SELECT tst_tags.TagTxt" // row[0] "SELECT tst_tags.TagTxt" // row[0]
" FROM (SELECT DISTINCT(tst_question_tags.TagCod)" " FROM (SELECT DISTINCT "
"tst_question_tags.TagCod"
" FROM tst_question_tags," " FROM tst_question_tags,"
"tst_exam_questions" "tst_exam_questions"
" WHERE tst_exam_questions.ExaCod=%ld" " WHERE tst_exam_questions.ExaCod=%ld"

View File

@ -1079,7 +1079,8 @@ unsigned Tml_DB_GetPublishersInNoteExceptMe (MYSQL_RES **mysql_res,long PubCod)
{ {
return (unsigned) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get publishers of a note", DB_QuerySELECT (mysql_res,"can not get publishers of a note",
"SELECT DISTINCT(PublisherCod)" "SELECT DISTINCT "
"PublisherCod"
" FROM tml_pubs" " FROM tml_pubs"
" WHERE NotCod=(SELECT NotCod" " WHERE NotCod=(SELECT NotCod"
" FROM tml_pubs" " FROM tml_pubs"

View File

@ -125,8 +125,8 @@ unsigned Tmt_DB_GetTimeTable (MYSQL_RES **mysql_res,
"tmt_courses.ClassType," // row[4] "tmt_courses.ClassType," // row[4]
"tmt_courses.GrpCod," // row[5] "tmt_courses.GrpCod," // row[5]
"tmt_courses.CrsCod" // row[6] "tmt_courses.CrsCod" // row[6]
" FROM tmt_courses," " FROM crs_users,"
"crs_users" "tmt_courses"
" WHERE crs_users.UsrCod=%ld" " WHERE crs_users.UsrCod=%ld"
" AND tmt_courses.GrpCod=-1" " AND tmt_courses.GrpCod=-1"
" AND tmt_courses.CrsCod=crs_users.CrsCod" " AND tmt_courses.CrsCod=crs_users.CrsCod"
@ -172,8 +172,8 @@ unsigned Tmt_DB_GetTimeTable (MYSQL_RES **mysql_res,
"tmt_courses.ClassType," // row[4] "tmt_courses.ClassType," // row[4]
"tmt_courses.GrpCod," // row[5] "tmt_courses.GrpCod," // row[5]
"tmt_courses.CrsCod" // row[6] "tmt_courses.CrsCod" // row[6]
" FROM tmt_courses," " FROM crs_users,"
"crs_users" "tmt_courses"
" WHERE crs_users.UsrCod=%ld" " WHERE crs_users.UsrCod=%ld"
" AND tmt_courses.CrsCod=crs_users.CrsCod" " AND tmt_courses.CrsCod=crs_users.CrsCod"
" UNION " " UNION "

View File

@ -2945,7 +2945,8 @@ static void Usr_BuildQueryToGetUsrsLstCrs (char **Query,Rol_Role_t Role)
if (NumPositiveCods) if (NumPositiveCods)
{ {
Str_Concat (*Query," AND (crs_users.UsrCod IN" Str_Concat (*Query," AND (crs_users.UsrCod IN"
" (SELECT DISTINCT UsrCod" " (SELECT DISTINCT "
"UsrCod"
" FROM grp_users" " FROM grp_users"
" WHERE", " WHERE",
Usr_MAX_BYTES_QUERY_GET_LIST_USRS); Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
@ -2979,7 +2980,8 @@ static void Usr_BuildQueryToGetUsrsLstCrs (char **Query,Rol_Role_t Role)
Str_Concat (*Query," AND (",Usr_MAX_BYTES_QUERY_GET_LIST_USRS); Str_Concat (*Query," AND (",Usr_MAX_BYTES_QUERY_GET_LIST_USRS);
/* Select all students of the course who don't belong to any group of type GrpTypCod */ /* Select all students of the course who don't belong to any group of type GrpTypCod */
Str_Concat (*Query,"crs_users.UsrCod NOT IN" Str_Concat (*Query,"crs_users.UsrCod NOT IN"
" (SELECT DISTINCT grp_users.UsrCod" " (SELECT DISTINCT "
"grp_users.UsrCod"
" FROM grp_groups," " FROM grp_groups,"
"grp_users" "grp_users"
" WHERE grp_groups.GrpTypCod='", " WHERE grp_groups.GrpTypCod='",
@ -3023,7 +3025,8 @@ void Usr_GetListUsrs (HieLvl_Level_t Scope,Rol_Role_t Role)
{ {
char *Query = NULL; char *Query = NULL;
const char *QueryFields = const char *QueryFields =
"DISTINCT usr_data.UsrCod," "DISTINCT "
"usr_data.UsrCod,"
"usr_data.EncryptedUsrCod," "usr_data.EncryptedUsrCod,"
"usr_data.Password," "usr_data.Password,"
"usr_data.Surname1," "usr_data.Surname1,"
@ -3181,7 +3184,8 @@ void Usr_SearchListUsrs (Rol_Role_t Role)
char *Query = NULL; char *Query = NULL;
char SubQueryRole[64]; char SubQueryRole[64];
const char *QueryFields = const char *QueryFields =
"DISTINCT usr_data.UsrCod," "DISTINCT "
"usr_data.UsrCod,"
"usr_data.EncryptedUsrCod," "usr_data.EncryptedUsrCod,"
"usr_data.Password," "usr_data.Password,"
"usr_data.Surname1," "usr_data.Surname1,"
@ -3581,7 +3585,8 @@ static void Usr_GetAdmsLst (HieLvl_Level_t Scope)
"SELECT %s" "SELECT %s"
" FROM usr_data" " FROM usr_data"
" WHERE UsrCod IN " " WHERE UsrCod IN "
"(SELECT DISTINCT UsrCod" "(SELECT DISTINCT "
"UsrCod"
" FROM usr_admins)" " FROM usr_admins)"
" ORDER BY Surname1," " ORDER BY Surname1,"
"Surname2," "Surname2,"
@ -3870,30 +3875,10 @@ void Usr_GetUnorderedStdsCodesInDeg (long DegCod)
{ {
char *Query = NULL; char *Query = NULL;
/***** Get the students in a degree from database *****/ /***** Build query string *****/
DB_BuildQuery (&Query, Usr_DB_BuildQueryToGetUnorderedStdsCodesInDeg (DegCod,&Query);
"SELECT DISTINCT usr_data.UsrCod," // row[ 0]
"usr_data.EncryptedUsrCod," // row[ 1]
"usr_data.Password," // row[ 2]
"usr_data.Surname1," // row[ 3]
"usr_data.Surname2," // row[ 4]
"usr_data.FirstName," // row[ 5]
"usr_data.Sex," // row[ 6]
"usr_data.Photo," // row[ 7]
"usr_data.PhotoVisibility," // row[ 8]
"usr_data.CtyCod," // row[ 9]
"usr_data.InsCod" // row[10]
" FROM crs_courses,"
"crs_users,"
"usr_data"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u"
" AND crs_users.UsrCod=usr_data.UsrCod",
DegCod,
(unsigned) Rol_STD);
/***** Get list of students from database *****/ /***** Get list of students *****/
Usr_GetListUsrsFromQuery (Query,Rol_STD,HieLvl_DEG); Usr_GetListUsrsFromQuery (Query,Rol_STD,HieLvl_DEG);
/***** Free query string *****/ /***** Free query string *****/
@ -3986,10 +3971,9 @@ static void Usr_GetListUsrsFromQuery (char *Query,Rol_Role_t Role,HieLvl_Level_t
/* Get user's photo visibility (row[8]) */ /* Get user's photo visibility (row[8]) */
UsrInList->PhotoVisibility = Pri_GetVisibilityFromStr (row[8]); UsrInList->PhotoVisibility = Pri_GetVisibilityFromStr (row[8]);
/* Get user's country code (row[9]) */ /* Get user's country code (row[9])
UsrInList->CtyCod = Str_ConvertStrCodToLongCod (row[9]); and user's institution code (row[10]) */
UsrInList->CtyCod = Str_ConvertStrCodToLongCod (row[ 9]);
/* Get user's institution code (row[10]) */
UsrInList->InsCod = Str_ConvertStrCodToLongCod (row[10]); UsrInList->InsCod = Str_ConvertStrCodToLongCod (row[10]);
/* Get user's role and acceptance of enrolment in course(s) /* Get user's role and acceptance of enrolment in course(s)
@ -4462,7 +4446,7 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
Usr_DONT_GET_ROLE_IN_CURRENT_CRS); Usr_DONT_GET_ROLE_IN_CURRENT_CRS);
/* Find if encrypted user's code is already in list */ /* Find if encrypted user's code is already in list */
if (!Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (UsrDat.EnUsrCod,&Gbl.Usrs.Selected)) // If not in list ==> add it if (!Usr_FindEncryptedUsrCodInListOfSelectedEncryptedUsrCods (UsrDat.EnUsrCod,&Gbl.Usrs.Selected)) // If not in list ==> add it
{ {
LengthUsrCod = strlen (UsrDat.EnUsrCod); LengthUsrCod = strlen (UsrDat.EnUsrCod);
@ -4513,7 +4497,7 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
/*****************************************************************************/ /*****************************************************************************/
// Returns true if EncryptedUsrCodToFind is in list // Returns true if EncryptedUsrCodToFind is in list
bool Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (const char *EncryptedUsrCodToFind, bool Usr_FindEncryptedUsrCodInListOfSelectedEncryptedUsrCods (const char *EncryptedUsrCodToFind,
struct SelectedUsrs *SelectedUsrs) struct SelectedUsrs *SelectedUsrs)
{ {
const char *Ptr; const char *Ptr;
@ -5089,7 +5073,7 @@ static void Usr_PutCheckboxToSelectUser (Rol_Role_t Role,
CheckboxChecked = true; CheckboxChecked = true;
else else
/* Check if user is in lists of selected users */ /* Check if user is in lists of selected users */
CheckboxChecked = Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (EncryptedUsrCod,SelectedUsrs); CheckboxChecked = Usr_FindEncryptedUsrCodInListOfSelectedEncryptedUsrCods (EncryptedUsrCod,SelectedUsrs);
/***** Check box *****/ /***** Check box *****/
Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Role],SelectedUsrs->ParamSuffix); Usr_BuildParamName (&ParamName,Usr_ParamUsrCod[Role],SelectedUsrs->ParamSuffix);
@ -5489,9 +5473,9 @@ void Usr_ListAllDataStds (void)
extern const char *Txt_Date_of_birth; extern const char *Txt_Date_of_birth;
extern const char *Txt_Group; extern const char *Txt_Group;
extern const char *Txt_RECORD_FIELD_VISIBILITY_RECORD[Rec_NUM_TYPES_VISIBILITY]; extern const char *Txt_RECORD_FIELD_VISIBILITY_RECORD[Rec_NUM_TYPES_VISIBILITY];
unsigned NumColumnsCommonCard; unsigned NumColsCommonRecord;
unsigned NumColumnsCardAndGroups; unsigned NumColsRecordAndGroups;
unsigned NumColumnsTotal; unsigned NumColsTotal;
unsigned NumCol; unsigned NumCol;
unsigned NumUsr; unsigned NumUsr;
char *GroupNames; char *GroupNames;
@ -5544,19 +5528,20 @@ void Usr_ListAllDataStds (void)
Rec_GetListRecordFieldsInCurrentCrs (); Rec_GetListRecordFieldsInCurrentCrs ();
/***** Set number of columns *****/ /***** Set number of columns *****/
NumColumnsCommonCard = Usr_NUM_ALL_FIELDS_DATA_STD; NumColsCommonRecord = Usr_NUM_ALL_FIELDS_DATA_STD;
if (Gbl.Scope.Current == HieLvl_CRS) if (Gbl.Scope.Current == HieLvl_CRS)
{ {
NumColumnsCardAndGroups = NumColumnsCommonCard + Gbl.Crs.Grps.GrpTypes.NumGrpTypes; NumColsRecordAndGroups = NumColsCommonRecord + Gbl.Crs.Grps.GrpTypes.NumGrpTypes;
NumColumnsTotal = NumColumnsCardAndGroups + Gbl.Crs.Records.LstFields.Num; NumColsTotal = NumColsRecordAndGroups + Gbl.Crs.Records.LstFields.Num;
} }
else else
NumColumnsTotal = NumColumnsCardAndGroups = NumColumnsCommonCard; NumColsTotal = NumColsRecordAndGroups = NumColsCommonRecord;
/***** Allocate memory for the string with the list of group names where student belongs to *****/ /***** Allocate memory for the string with the list of group names where student belongs to *****/
if (Gbl.Scope.Current == HieLvl_CRS) if (Gbl.Scope.Current == HieLvl_CRS)
{ {
Length = (size_t) (Grp_MAX_BYTES_GROUP_NAME + 2) * (size_t) Gbl.Crs.Grps.GrpTypes.NumGrpsTotal; Length = (size_t) (Grp_MAX_BYTES_GROUP_NAME + 2) *
(size_t) Gbl.Crs.Grps.GrpTypes.NumGrpsTotal;
if ((GroupNames = malloc (Length + 1)) == NULL) if ((GroupNames = malloc (Length + 1)) == NULL)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
} }
@ -5567,7 +5552,7 @@ void Usr_ListAllDataStds (void)
if (!Gbl.Usrs.ClassPhoto.AllGroups) if (!Gbl.Usrs.ClassPhoto.AllGroups)
{ {
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TD_Begin ("colspan=\"%u\" class=\"TIT CM\"",NumColumnsTotal); HTM_TD_Begin ("colspan=\"%u\" class=\"TIT CM\"",NumColsTotal);
Grp_WriteNamesOfSelectedGrps (); Grp_WriteNamesOfSelectedGrps ();
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -5580,7 +5565,7 @@ void Usr_ListAllDataStds (void)
/* 1. Columns for the data */ /* 1. Columns for the data */
for (NumCol = (Gbl.Usrs.Listing.WithPhotos ? 0 : for (NumCol = (Gbl.Usrs.Listing.WithPhotos ? 0 :
1); 1);
NumCol < NumColumnsCommonCard; NumCol < NumColsCommonRecord;
NumCol++) NumCol++)
HTM_TH (1,1,"LM LIGHT_BLUE",FieldNames[NumCol]); HTM_TH (1,1,"LM LIGHT_BLUE",FieldNames[NumCol]);
@ -5614,7 +5599,7 @@ void Usr_ListAllDataStds (void)
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
for (NumCol = 0; for (NumCol = 0;
NumCol < NumColumnsCardAndGroups; NumCol < NumColsRecordAndGroups;
NumCol++) NumCol++)
if (NumCol != 1 || Gbl.Usrs.Listing.WithPhotos) // Skip photo column if I don't want it in listing if (NumCol != 1 || Gbl.Usrs.Listing.WithPhotos) // Skip photo column if I don't want it in listing
{ {
@ -6764,7 +6749,8 @@ static void Usr_ShowOneListUsrsOption (Usr_ListUsrsOption_t ListUsrsAction,
HTM_INPUT_RADIO ("ListUsrsAction",false, HTM_INPUT_RADIO ("ListUsrsAction",false,
"value=\"%u\"%s", "value=\"%u\"%s",
(unsigned) ListUsrsAction, (unsigned) ListUsrsAction,
ListUsrsAction == Gbl.Usrs.Selected.Option ? " checked=\"checked\"" : ""); ListUsrsAction == Gbl.Usrs.Selected.Option ? " checked=\"checked\"" :
"");
HTM_Txt (Label); HTM_Txt (Label);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_LI_End (); HTM_LI_End ();
@ -7370,12 +7356,14 @@ void Usr_PutSelectorNumColsClassPhoto (void)
extern const char *Txt_columns; extern const char *Txt_columns;
unsigned Cols; unsigned Cols;
/***** Begin selector *****/ /***** Begin label *****/
HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
/***** Begin selector *****/
HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE, HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,
"name=\"ColsClassPhoto\""); "name=\"ColsClassPhoto\"");
/***** Put a row in selector for every number from 1 to Usr_CLASS_PHOTO_COLS_MAX *****/ /***** Put a row in selector for every number of columns *****/
for (Cols = 1; for (Cols = 1;
Cols <= Usr_CLASS_PHOTO_COLS_MAX; Cols <= Usr_CLASS_PHOTO_COLS_MAX;
Cols++) Cols++)
@ -7385,7 +7373,10 @@ void Usr_PutSelectorNumColsClassPhoto (void)
/***** End selector *****/ /***** End selector *****/
HTM_SELECT_End (); HTM_SELECT_End ();
HTM_Txt (Txt_columns); HTM_Txt (Txt_columns);
/***** End label *****/
HTM_LABEL_End (); HTM_LABEL_End ();
} }
@ -7519,7 +7510,19 @@ void Usr_WriteAuthor1Line (long UsrCod,bool Hidden)
void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows) void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows)
{ {
Act_Action_t NextAction; static const Act_Action_t NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = ActUnk,
[Rol_GST ] = ActUnk,
[Rol_USR ] = ActUnk,
[Rol_STD ] = ActSeeRecOneStd,
[Rol_NET ] = ActSeeRecOneTch,
[Rol_TCH ] = ActSeeRecOneTch,
[Rol_DEG_ADM] = ActUnk,
[Rol_CTR_ADM] = ActUnk,
[Rol_INS_ADM] = ActUnk,
[Rol_SYS_ADM] = ActUnk,
};
/***** Show user's photo *****/ /***** Show user's photo *****/
if (NumRows) if (NumRows)
@ -7539,27 +7542,13 @@ void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows)
HTM_TD_Begin ("class=\"LT LINE_BOTTOM COLOR%u\"",Gbl.RowEvenOdd); HTM_TD_Begin ("class=\"LT LINE_BOTTOM COLOR%u\"",Gbl.RowEvenOdd);
/* Action to go to user's record depending on role in course */ /* Action to go to user's record depending on role in course */
switch (UsrDat->Roles.InCurrentCrs) if (NextAction[UsrDat->Roles.InCurrentCrs] == ActUnk)
{
case Rol_STD:
NextAction = ActSeeRecOneStd;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActSeeRecOneTch;
break;
default:
NextAction = ActUnk;
break;
}
if (NextAction == ActUnk)
/* Begin div */ /* Begin div */
HTM_DIV_Begin ("class=\"LT AUTHOR_TXT\""); HTM_DIV_Begin ("class=\"LT AUTHOR_TXT\"");
else else
{ {
/* Begin form to go to user's record card */ /* Begin form to go to user's record card */
Frm_BeginForm (NextAction); Frm_BeginForm (NextAction[UsrDat->Roles.InCurrentCrs]);
Usr_PutParamUsrCodEncrypted (UsrDat->EnUsrCod); Usr_PutParamUsrCodEncrypted (UsrDat->EnUsrCod);
HTM_BUTTON_SUBMIT_Begin (UsrDat->FullName,"BT_LINK LT AUTHOR_TXT",NULL); HTM_BUTTON_SUBMIT_Begin (UsrDat->FullName,"BT_LINK LT AUTHOR_TXT",NULL);
} }
@ -7579,7 +7568,7 @@ void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows)
HTM_Txt (UsrDat->FrstName); HTM_Txt (UsrDat->FrstName);
} }
if (NextAction == ActUnk) if (NextAction[UsrDat->Roles.InCurrentCrs] == ActUnk)
/* End div */ /* End div */
HTM_DIV_End (); HTM_DIV_End ();
else else

View File

@ -368,7 +368,7 @@ void Usr_GetListsSelectedEncryptedUsrsCods (struct SelectedUsrs *SelectedUsrs);
bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs); bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs);
bool Usr_FindEncryptedUsrCodsInListOfSelectedEncryptedUsrCods (const char *EncryptedUsrCodToFind, bool Usr_FindEncryptedUsrCodInListOfSelectedEncryptedUsrCods (const char *EncryptedUsrCodToFind,
struct SelectedUsrs *SelectedUsrs); struct SelectedUsrs *SelectedUsrs);
bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs); bool Usr_CheckIfThereAreUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs);
unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs); unsigned Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (struct SelectedUsrs *SelectedUsrs);

View File

@ -205,6 +205,36 @@ bool Usr_DB_FindStrInUsrsNames (const char *Str)
Str); Str);
} }
/*****************************************************************************/
/****** Build query to get the user's codes of all students of a degree ******/
/*****************************************************************************/
void Usr_DB_BuildQueryToGetUnorderedStdsCodesInDeg (long DegCod,char **Query)
{
DB_BuildQuery (Query,
"SELECT DISTINCT "
"usr_data.UsrCod," // row[ 0]
"usr_data.EncryptedUsrCod," // row[ 1]
"usr_data.Password," // row[ 2]
"usr_data.Surname1," // row[ 3]
"usr_data.Surname2," // row[ 4]
"usr_data.FirstName," // row[ 5]
"usr_data.Sex," // row[ 6]
"usr_data.Photo," // row[ 7]
"usr_data.PhotoVisibility," // row[ 8]
"usr_data.CtyCod," // row[ 9]
"usr_data.InsCod" // row[10]
" FROM crs_courses,"
"crs_users,"
"usr_data"
" WHERE crs_courses.DegCod=%ld"
" AND crs_courses.CrsCod=crs_users.CrsCod"
" AND crs_users.Role=%u"
" AND crs_users.UsrCod=usr_data.UsrCod",
DegCod,
(unsigned) Rol_STD);
}
/*****************************************************************************/ /*****************************************************************************/
/************** Get number of users who have chosen an option ****************/ /************** Get number of users who have chosen an option ****************/
/*****************************************************************************/ /*****************************************************************************/
@ -316,7 +346,8 @@ unsigned Usr_DB_GetOldUsrs (MYSQL_RES **mysql_res,time_t SecondsWithoutAccess)
" FROM usr_last)" " FROM usr_last)"
") AS candidate_usrs" ") AS candidate_usrs"
" WHERE UsrCod NOT IN" " WHERE UsrCod NOT IN"
" (SELECT DISTINCT UsrCod" " (SELECT DISTINCT "
"UsrCod"
" FROM crs_users)", " FROM crs_users)",
(unsigned long long) SecondsWithoutAccess); (unsigned long long) SecondsWithoutAccess);
} }

View File

@ -68,6 +68,7 @@ void Usr_DB_UpdateMyLastWhatToSearch (void);
bool Usr_DB_ChkIfUsrCodExists (long UsrCod); bool Usr_DB_ChkIfUsrCodExists (long UsrCod);
long Usr_DB_GetUsrCodFromEncryptedUsrCod (const char EncryptedUsrCod[Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1]); long Usr_DB_GetUsrCodFromEncryptedUsrCod (const char EncryptedUsrCod[Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1]);
bool Usr_DB_FindStrInUsrsNames (const char *Str); bool Usr_DB_FindStrInUsrsNames (const char *Str);
void Usr_DB_BuildQueryToGetUnorderedStdsCodesInDeg (long DegCod,char **Query);
unsigned Usr_DB_GetNumUsrsWhoChoseAnOption (const char *SubQuery); unsigned Usr_DB_GetNumUsrsWhoChoseAnOption (const char *SubQuery);
unsigned Usr_DB_GetOldUsrs (MYSQL_RES **mysql_res,time_t SecondsWithoutAccess); unsigned Usr_DB_GetOldUsrs (MYSQL_RES **mysql_res,time_t SecondsWithoutAccess);