Сложить значения определенных столбцов из БД

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X

Создать SQL запрос

#1 9 сентября 2017 в 15:16
Привет.

Необходимо сложить значения определенных столбцов из БД, сделать это можно запросом:

  1. SELECT SUM(`column_name`) FROM `table_name`;
Но такого метода в iCMS 2 нет

Создал метод в модели контроллера компонента:
  1.  
  2. public function getSum($table_name, $by_field) {
  3.  
  4. $sql = "SELECT SUM({$by_field}) FROM cms_{$table_name}";
  5.  
  6. $result = $this->db->query($sql);
  7.  
  8. return $result;
  9.  
  10. }
  11.  
Как получить модель ядра? Или код:

  1. $this->db->query($sql);
будет работать?

Возможно есть другое решение?
#2 9 сентября 2017 в 15:29
$this->model->db->query($sql);
#3 9 сентября 2017 в 15:33

$this->model->db->query($sql);

Ris

После такого страница не загружается!
#4 9 сентября 2017 в 15:37
Вадим Нарочный,
Так это уже в модели, а модель любого контроллера extends cmsModel
Поэтому просто, как Вы и написали:
$this->db->query($sql);
#5 9 сентября 2017 в 15:38
Разобрался, нужно было добавить:
  1. $item = $this->db->fetchAssoc($result);
#6 9 сентября 2017 в 15:49
Вадим Нарочный,
Вы вообще-то зря системные файлы курочите.
Лучше найдите в модели, фронтенде или экшене вашего компонента вызов хука (что-то типа cmsEventsManager::hook(') и сделайте православный хук, в котором и добавьте функцию вычисления суммы полей.
#7 9 сентября 2017 в 15:52


Вадим Нарочный,
Вы вообще-то зря системные файлы курочите.
Лучше найдите в модели, фронтенде или экшене вашего компонента вызов хука (что-то типа cmsEventsManager::hook(') и сделайте православный хук, в котором и добавьте функцию вычисления суммы полей.

Ris

Вы внимательно прочитайте, что я написал:

Создал метод в модели контроллера компонента


Так что системные файлы никто не трогает!
#8 9 сентября 2017 в 15:58

сделайте православный хук

Ris
По православному, надо делать как-то так
  1. public function getSum($table_name, $by_field) {
  2. return $this->select('SUM('.$by_field.')', 'summ')->get($table_name);
  3. }
а потом сумму искать в summ.
#9 9 сентября 2017 в 16:03


сделайте православный хук

Ris
По православному, надо делать как-то так
  1. public function getSum($table_name, $by_field) {
  2. return $this->select('SUM('.$by_field.')', 'summ')->get($table_name);
  3. }
а потом сумму искать в summ.

Loadырь

спасибо. Ну тогда уж:

  1. selectOnly
#10 9 сентября 2017 в 16:05
Всем спасибо, сделал так:

  1. public function getVotesSum($table_name, $by_field) {
  2.  
  3. return $this->selectOnly('SUM('.$by_field.')', 'summ')->getItem($table_name);
  4.  
  5. }
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.