我有一个班级表和一个科目表。
CLASS |class_id|class_name|subject_id|date_time| ------------------------------------------ (imagine some rows here) SUBJECT |subject_id|subject_name|current_class_count| --------------------------------------------- (imagine some rows here)
为了编制索引,我想每小时使用比date_time
更大的类列表更新主题列表。
我可以这样做一个选择语句:
SELECT count(*) AS num, subject_id FROM class GROUP BY subject_id where date_time > NOW()
我会得到像
这样的东西RESULT |num|subject_id| ---------------- | 8 | 1 | | 6 | 2 | | 9 | 3 | ----------------
使用current_class_count
更新主题表的最有效方法是什么?我可以通过循环并执行几个更新语句来使用PHP来完成此操作,但我认为mySql应该有一个更简单的方法。
答案 0 :(得分:2)
修改:这个怎么样:
UPDATE SUBJECT LEFT JOIN ( SELECT count(*) AS num, subject_id FROM class GROUP BY subject_id where date_time > NOW()) AS t ON SUBJECT.subject_id = t.subject_id SET SUBJECT.current_class_count = coalesce( t.num, 0 )
只要我输入正确,基本上你应该能够每小时运行一次,它会更新你的SUBJECT表。
与Microsoft SQL相比,在UPDATE语句中加入表有点不同。这是一个关于它的链接:
http://blog.ookamikun.com/2008/03/mysql-update-with-join.html