更改行时SQL查询不更新表

时间:2015-01-29 17:50:07

标签: c# mysql

我的SQL查询存在一个小问题,最好通过示例解释:

1)如果booking.status设置为打开,则在方法运行并在数据表中显示时对其进行计数。我们来看plot_id=15,你可以看到它在表格中出现了3次。

enter image description here

enter image description here

2)因此,更改将反映在plot.jobs

enter image description here

3)但是在更新booking.status的情况下,当方法运行或在数据表中显示时,不再计算它。这是预期的。

enter image description here

enter image description here

4)如果它没有出现在列表中,那么这意味着plot.plot_id=15应为0 ...为什么它仍然是plot.jobs中的3

enter image description here

我认为我错过了if (dtCounts.Rows.Count > 0) {...}条件中的SQL查询。问题是我不知道从哪里开始实现它。有谁能指出我正确的方向?在更新booking.status时,如何考虑更改plot.jobs的实例?

到目前为止,这是我的代码:http://pastebin.com/pYu17aVR

(抱歉,出于某种原因,S / O不会让我将代码粘贴到答案中,它会不断返回错误消息)

3 个答案:

答案 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的数据会发生什么?那些新的地块怎么样?