mySQL UPDATE表基于另一个表的SELECT(count)

时间:2011-06-02 00:28:19

标签: php mysql

我有一个班级表和一个科目表。

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应该有一个更简单的方法。

1 个答案:

答案 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