Вопрос по запросу.
Подскажите пожалуйста кто шарит. Суть такая: нужно вывести список учителей (это юзеры с ролью teacher). У выведенного списка учителей нужно в скобочках указать количество учеников, которые им принадлежат (данный признак у учеников лежит в профиле в поле extended в поле id_teacher). Все дело уже реализовано с помощью кода:
Все вроде супер, но получается если к примеру 100 учителей то будет в итоге 101 запрос к БД, при том что еще нужно сделать, чтобы эти учителя сортировались по количеству учеников. Хочется сделать это в 1 запрос. Написал что то вроде этого, но не работает:
[[!pdoUsers?
&groups=`teacher`
&limit=`0`
&tpl=`tplTeachersToSelect`
]]
А в самой tpl:[[!pdoUsers?
&tpl=`@INLINE`
&where=`{"modUserProfile.extended:LIKE":"%\"id_teacher\":\"[[+id]]\"%"}`
&setTotal=`1`
]]
<option value="[[+id]]">[[$fullname]] ([[+total]])</option>
[[!pdoUsers?
&groups=`teacher`
&limit=`0`
&tpl=`tplTeachersToSelect`
&innerJoin=`{
"UserGroup": {
"class": "modUserGroup",
"on": "UserGroupMember.user_group = UserGroup.id"
},
"UserGroupMember": {
"class": "modUserGroupMember",
"on": "Student.internalKey = UserGroupMember.member"
},
"Student":{
"class":"modUserProfile",
"on":"Student.extended LIKE %\"id_teacher\":\"modUser.id\"%"
}
}`
&select=`{
"modUser": "id",
"modUserProfile": "fullname",
"Student":"COUNT(Student.internalKey) as count"
}`
&where=`{
"UserGroup.name":"student"
}`
&showLog=`1`
]]
Как я понял «Student.extended LIKE %\»id_teacher\":\«modUser.id\»%" ему не нравится. Сможете помочь? И с сортировкой тоже.Комментарии: 1
Решил. Если кому надо то ловите:
[[!pdoUsers?
&groups=`teacher`
&limit=`0`
&tpl=`@INLINE [[+id]] - [[+fullname]] ([[+count]])`
&innerJoin=`{
"Student":{
"class":"modUserProfile",
"on":"Student.extended LIKE CONCAT('%\"id_teacher\":\"',modUser.id,'\"%')"
},
"UserGroupMember": {
"class": "modUserGroupMember",
"on": "Student.internalKey = UserGroupMember.member"
},
"UserGroup": {
"class": "modUserGroup",
"on": "UserGroupMember.user_group = UserGroup.id"
}
}`
&select=`{
"modUser": "id",
"modUserProfile": "fullname",
"Student":"COUNT(Student.internalKey) as count"
}`
&where=`{
"UserGroup.name":"student"
}`
&sortby=`{
"count":"ASC"
}`
&showLog=`1`
]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.