【问题标题】:Trigger update other table with count使用计数触发更新其他表
【发布时间】:2017-01-05 18:30:15
【问题描述】:

我有三个表:contactaccountaccount_contact。 account_contact 具有联系人和帐户之间的关系。

account 表中,我有字段 account_contacts,其中我有每个帐户的联系人计数。我可以运行一个更新此值的 sql,但我想在每次创建或更新联系人表时更新它。

这是更新sql:

update account a 
  left join (
    select ac.account_id as a_id, count(c.id) as contacts
    from account_contact ac
    inner join contact c
    on ac.contact_id = c.id
    where c.deleted = 0
    group by ac.account_id
    ) as n 
    ON a.id = n.a_id
    SET a.account_contacts = n.contacts

这是我尝试过的代码:

CREATE TRIGGER `contact_new` AFTER INSERT ON `contact`
 FOR EACH ROW update account a set a.account_contacts = a.account_contacts + 1 
where a.id = (select ac.account_id from account_contact ac where ac.contact_id = NEW.id)

我在stackoverflow中找到的关于触发器的答案只有两个表。

【问题讨论】:

  • 到底怎么不行,IE如果有错误信息,是什么?
  • @Jake:它不起作用,因为我向帐户添加了新联系人并且联系人数量 account.account_contacts 没有改变。
  • @user366329:我阅读网上的内容并在互联网上搜索答案。我只是不明白我必须在这里做什么,否则我不会问。更基本的事情在这里问和回答,没有讽刺。

标签: mysql join triggers group-by


【解决方案1】:

好的,完成!这是代码,和更新的差别不大。

CREATE TRIGGER `contact_new` AFTER INSERT ON `contact`
 FOR EACH ROW update account a 
  left join (
    select ac.account_id as a_id
    from account_contact ac
    inner join contact c
    on ac.contact_id = c.id
    where ac.contact_id = NEW.id
    ) as n 
    ON a.id = n.a_id
    SET a.account_contacts = a.account_contacts + 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2014-08-03
    • 2018-01-25
    • 2011-06-29
    相关资源
    最近更新 更多