Как суммировать все значения из выборки?

Есть выборка pdoResources, значения которой обрабатываются в чанком

<td>[[#[[+parent]].tv.long]]</td>
А можно как-то их просуммировать или это отдельный сниппет нужно писать?
Андрей
24 июня 2018, 15:10
modx.pro
1
1 929
0

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

Сергей
24 июня 2018, 19:21
0
Полный код вызова сниппета выложите
    Андрей
    24 июня 2018, 19:51
    0
    вот код выборки
    [[!pdoResources?
                             &parents=`137`
                             &depth=`5`
                             &tpl=`tpl.tpl`
                             &sortby=`menuindex`
                             &sortdir=`ASC`
                             &where=`{"pagetitle":"[[*pagetitle]]"}`
                             &showUnpublished=`1`
                             &limit=`100`
                            ]]
    чанк tpl.tpl содержит несколько строк аналогичных
    <td>[[#[[+parent]].tv.long]]</td>
    то есть у меня есть некая таблица, нужно внизу вывести строку Итого для тех столбцов, которые можно суммировать.
      Сергей
      24 июня 2018, 21:44
      +1
      Отдельным сниппетом на последней строке «Где результирующие данные»
      Но тут такой момент. Этот пример для выборки TV — поля. Для других данных код может быть другим

      vLong.tmplvarid = 25"
      цифру 25 меняете на ID нужного TV поля.
      tv_long_sum — название плейсхолдера в результате. название tvLong тоже на любой можно заменить

      [[!pdoResources?
          &parents=`137`
          &depth=`5`
          &tpl=``
          &sortby=`menuindex`
          &sortdir=`ASC`
          &where=`{"pagetitle":"[[*pagetitle]]"}`
          &showUnpublished=`1`
          &limit=`100`
          &leftJoin=`{
              "tvLong":{
                  "class":"modTemplateVarResource", 
                  "on":"modResource.parent = tvLong.contentid AND tvLong.tmplvarid = 25"
              }
          }`
          &select=`{
              "tvLong": "SUM(tvLong.value) as tv_long_sum"
          }`
      ]]
        Андрей
        24 июня 2018, 22:19
        0
        спасибо, работает.
        а в другом случае у меня та же выборка и та же таблица, только строки выводятся по условию. то есть чанк выглядит вот так
        {if $parent | resource: 'tv_parametr' == 'да'}
        <tr>
        	<td>[[#[[+parent]].tv.long]]</td>
        </tr>
        {/if}
        и соответственно в сумму попадают лишние данные. я так понимаю это условие нужно перенести в выборку, не подскажите как?
          Сергей
          24 июня 2018, 22:36
          0
          Пишу наугад без проверки. Но должно работать

          [[!pdoResources?
              &parents=`137`
              &depth=`5`
              &tpl=``
              &sortby=`menuindex`
              &sortdir=`ASC`
              &where=`{
          		"pagetitle":"[[*pagetitle]]",
          		"tvParametr.value:=": "да" 
          	}`
              &showUnpublished=`1`
              &limit=`100`
              &leftJoin=`{
                  "tvLong":{
                      "class":"modTemplateVarResource", 
                      "on":"modResource.parent = tvLong.contentid AND tvLong.tmplvarid = 25"
                  },
                  "tvParametr":{
                      "class":"modTemplateVarResource", 
                      "on":"modResource.parent = tvParametr.contentid AND tvParametr.tmplvarid = 888"
                  }
              }`
              &select=`{
                  "tvLong": "SUM(tvLong.value) as tv_long_sum"
              }`
          ]]
            Андрей
            24 июня 2018, 23:12
            0
            почему-то появилась такая ошибка и сумма перестала работать
            [pdoTools] Error 42S22: Unknown column 'tvLong.value' in 'field list'
              Сергей
              24 июня 2018, 23:47
              0
              весь вызов сниппета скиньте
                Андрей
                25 июня 2018, 07:36
                0
                [[!pdoResources?
                    &parents=`137`
                    &depth=`5`
                    &tpl=`tpl.long`
                    &sortby=`menuindex`
                    &sortdir=`ASC`
                    &where=`{
                    "pagetitle":"[[*pagetitle]]",
                		"tvStatus.value:=": "да" 
                    }`
                    &showUnpublished=`1`
                    &limit=`100`
                    &leftJoin=`{
                        "tvLong":{
                            "class":"modTemplateVarResource", 
                            "on":"modResource.parent = tvLong.contentid AND tvLong.tmplvarid = 14",
                        "tvStatus":{
                            "class":"modTemplateVarResource", 
                            "on":"modResource.parent = tvStatus.contentid AND tvStatus.tmplvarid = 31"            
                        }
                    }`
                    &select=`{
                        "tvLong": "SUM(tvLong.value) as tv_long_sum"
                    }`
                  Сергей
                  25 июня 2018, 15:49
                  +1
                  Как минимум нет закрывающей скобки и запятой после нее. Проверьте, вот нормальный код

                  [[!pdoResources?
                      &parents=`137`
                      &depth=`5`
                      &tpl=`tpl.long`
                      &sortby=`menuindex`
                      &sortdir=`ASC`
                      &where=`{
                      "pagetitle":"[[*pagetitle]]",
                  		"tvStatus.value:=": "да" 
                      }`
                      &showUnpublished=`1`
                      &limit=`100`
                      &leftJoin=`{
                          "tvLong":{
                              "class":"modTemplateVarResource", 
                              "on":"modResource.parent = tvLong.contentid AND tvLong.tmplvarid = 14"
                          },
                          "tvStatus":{
                              "class":"modTemplateVarResource", 
                              "on":"modResource.parent = tvStatus.contentid AND tvStatus.tmplvarid = 31"            
                          }
                      }`
                      &select=`{
                          "tvLong": "SUM(tvLong.value) as tv_long_sum"
                      }`
                  ]]
                    Андрей
                    25 июня 2018, 18:55
                    0
                    да, спасибо за корректировку — ошибка ушла, но теперь выборка пустая такое ощущение, по крайней мере в tv_long_sum пусто, а если убрать
                    "tvStatus.value:=": "да"
                    то есть сумма
                      Андрей
                      26 июня 2018, 20:50
                      0
                      разобрался, код верный просто в этом TV использовались значения по умолчанию. после пересохранения ресурсов все заработало.
                      еще раз спасибо за помощь!
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      11