Вопрос по запросу.

Подскажите пожалуйста кто шарит. Суть такая: нужно вывести список учителей (это юзеры с ролью teacher). У выведенного списка учителей нужно в скобочках указать количество учеников, которые им принадлежат (данный признак у учеников лежит в профиле в поле extended в поле id_teacher). Все дело уже реализовано с помощью кода:
[[!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>
Все вроде супер, но получается если к примеру 100 учителей то будет в итоге 101 запрос к БД, при том что еще нужно сделать, чтобы эти учителя сортировались по количеству учеников. Хочется сделать это в 1 запрос. Написал что то вроде этого, но не работает:
[[!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\»%" ему не нравится. Сможете помочь? И с сортировкой тоже.
Евгений Лазарев
04 сентября 2018, 16:31
modx.pro
1
802
0

Комментарии: 1

Евгений Лазарев
04 сентября 2018, 17:06
0
Решил. Если кому надо то ловите:
[[!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`
                ]]
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1