Mysql, как изменить следующий запрос, чтобы Fech каждой строки таблицы? - PullRequest
0 голосов
/ 27 июля 2011

У меня событие происходит один раз в день. У меня есть 2 таблицы:

  • применение
  • Оценка

По сути, каждое приложение имеет avg_score, которое дается как среднее значение всех отзывов пользователей, которые хранятся в таблице рейтинга в поле оценки. Я написал событие, которое раз в день обновляет это значение:

CREATE EVENT MY_DAILY_UPDATE
ON SCHEDULE EVERY 1 DAY STARTS '2011-07-23 23:30:00'
DO

  UPDATE application
     SET `avg_score`= (SELECT AVG(`score`) as new_score
                         FROM `rating`
                        WHERE `ID_APPLICATION` = 1)      
   WHERE `APPLICATION_ID` = 1

Это работает, но только для приложения с ID = 1, потому что я написал это сам. Вместо этого мне нужен мой запрос для обновления поля avg_score для каждого приложения в табличном приложении.

Так что я думаю, что мне нужно изменить значение 1 с помощью идентификатора переменной (например, WHERE APPLICATION_ID = ID_VARIABLE) ....... и эта переменная должна принимать значение идентификатора каждого приложения в таблице приложения (1 , 2,3 ..... 4 и т. Д.) ....... но я понятия не имею, как изменить свой запрос .....

Ответы [ 2 ]

1 голос
/ 27 июля 2011
UPDATE application
SET `avg_score`= 
    (SELECT AVG(`score`) as new_score
     FROM `rating`
     WHERE `ID_APPLICATION` = `application.APPLICATION_ID`)
1 голос
/ 27 июля 2011

Измените свой подзапрос, чтобы ссылаться на значения во внешнем запросе.(Это делает его коррелированным подзапросом.)

UPDATE application
SET    avg_score = (
         SELECT AVG(score)
         FROM   rating
         WHERE  ID_APPLICATION = application.APPLICATION_ID
       )

В качестве альтернативы, поскольку вы делаете это для «всех значений», просто присоединитесь к подзапросу ...

UPDATE
  application
INNER JOIN
(
  SELECT ID_APPLICATION, AVG(score) AS score FROM rating GROUP BY ID_APPLICATION
)
  AS averages
    ON averages.ID_APPLICAITON = application.APPLICATION_ID
SET
  application.avg_score = averages.score
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...