我的SQL查询存在一个小问题,最好通过示例解释:
1)如果booking.status
设置为打开,则在方法运行并在数据表中显示时对其进行计数。我们来看plot_id=15
,你可以看到它在表格中出现了3次。
2)因此,更改将反映在plot.jobs
3)但是在更新booking.status
的情况下,当方法运行或在数据表中显示时,不再计算它。这是预期的。
4)如果它没有出现在列表中,那么这意味着plot.plot_id=15
应为0 ...为什么它仍然是plot.jobs
中的3
我认为我错过了if (dtCounts.Rows.Count > 0) {...}
条件中的SQL查询。问题是我不知道从哪里开始实现它。有谁能指出我正确的方向?在更新booking.status
时,如何考虑更改plot.jobs
的实例?
到目前为止,这是我的代码:http://pastebin.com/pYu17aVR
(抱歉,出于某种原因,S / O不会让我将代码粘贴到答案中,它会不断返回错误消息)
答案 0 :(得分:2)
不确定我是否明白你想要做什么。
你有没有想过在更新预订状态时实施触发器?
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_body
trigger_time: { BEFORE | AFTER }
trigger_event: { INSERT | UPDATE | DELETE }
答案 1 :(得分:1)
第12-17行的粘贴bin列表中给出的更新语句以booking.plot_id is NULL
(l.17)为条件。
答案 2 :(得分:1)
如果我正确理解您的问题,我根本不需要循环。相反,您可以将查询合并为一个,也可以处理空值:
update plot p
inner join (
select sum(case when status = 'open' then 1 else 0 end) cnt, plot_id
from booking
group by plot_id
) p2 on p.plot_id = p2.plot_id
set p.jobs = p2.cnt
有几点需要注意 - 如果预订表中没有针对该plot_id的数据会发生什么?那些新的地块怎么样?