Обновить вычисляемые поля - PullRequest
0 голосов
/ 31 декабря 2018

Итак, у меня есть 2 таблицы.

проекты

  id: Integer, PK
  rating: Float

project_counters

  project_id: Integer
  expires_at: DateTime
  value: Float

Есть ли способ написать запрос, который обновит все записи projects, установив рейтинг в суммезначения на соответствующих счетчиках, для которых expires_at установлено в будущем?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

@ Ответ GMB должен помочь, но стоит рассмотреть и другой подход - зачем вообще сохранять этот рейтинг в таблице projects, когда вы можете просто рассчитать его на лету с запросом по желанию:

SELECT   project_id, SUM(value)
FROM     projects_counter
WHERE    expires_at > NOW()
GROUP BY project_id
0 голосов
/ 31 декабря 2018

Этого можно достичь с помощью коррелированного подзапроса:

UPDATE projects p
SET p.rating = (
    SELECT SUM(pc.value)
    FROM projects_counter pc
    WHERE 
        pc.project_id = p.id
        AND pc.expires_at > NOW()
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...