У меня есть таблица классов и таблица тем.
КЛАСС | Class_id | class_name | subject_id | date_time | ------------------------------------------ (представьте себе несколько строк) ПРЕДМЕТ | Subject_id | subject_name | current_class_count | --------------------------------------------- (представьте себе несколько строк)
Для целей индексирования я хотел бы обновлять список тем каждый час списком классов, у которых date_time
больше, чем сейчас.
Я могу сделать предложение select следующим образом:
SELECT count (*) AS num, subject_id Класс FROM ГРУППА BY subject_id где date_time> СЕЙЧАС ()
и я получу что-то вроде
РЕЗУЛЬТАТ | Num | subject_id | ---------------- | 8 | 1 | | 6 | 2 | | 9 | 3 | ----------------
Каков наиболее эффективный способ обновить таблицу темы с помощью current_class_count
? Я мог бы сделать это с помощью PHP, выполнив цикл и выполнив несколько операторов обновления, но я думаю, что mySql должен иметь более простой способ.
Изменить : Как насчет этого:
ОБНОВЛЕНИЕ ПРЕДМЕТ LEFT JOIN ( SELECT count (*) AS num, subject_id Класс FROM ГРУППА BY subject_id где date_time> NOW ()) AS t ON SUBJECT.subject_id = t.subject_id SET SUBJECT.current_class_count = coalesce (t.num, 0)
Пока я набрал его правильно, в основном вы должны иметь возможность запускать это раз в час, и он обновит вашу таблицу SUBJECT.
Присоединение таблицы в инструкции UPDATE немного отличается от MySQL по сравнению с Microsoft SQL. Вот ссылка на это:
http://blog.ookamikun.com/2008/03/mysql-update-with-join.html