mySQL 基于不同表的 SELECT(计数)更新表

2024-05-11

我有一个课程表和一个科目表。



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


Edit: 这个怎么样:



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 相比,MySQL 中在 UPDATE 语句中连接表有点不同。这是一个关于它的链接:

http://blog.ookamikun.com/2008/03/mysql-update-with-join.html http://blog.ookamikun.com/2008/03/mysql-update-with-join.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mySQL 基于不同表的 SELECT(计数)更新表 的相关文章