当团队中的员工分配发生变化时,我会运行以下两个查询:
delete from `team_staff` where `team_id`=5
insert into `team_staff` (`team_id`,`staff_id`) values (5,1),(5,2)
在这种情况下,我将第5组的工作人员名单更改为工作人员1和工作人员2.任何被分配的人现在都未分配。
它可以工作,但我喜欢减少正在运行的查询数量 - 这对查询缓存很有用。
通常我会做这样的事情:
insert ignore into `team_staff` (`team_id`,`staff_id`) values (5,1),(5,2)
但是,这不会删除任何非员工1或员工2的员工。
有没有办法在单个查询中执行此操作,还是我坚持使用两个?
答案 0 :(得分:1)
没有插入&删除MySQL功能,但这并不意味着你运气不好。请考虑以下选项:
1)您当前的方法会删除,而不会参考您的插入是否会重新插入您已删除的内容,从而创建更多不需要完成的工作。此外,一直删除所有这些行将需要定期运行一些OPTIMIZE命令。您可以优化删除命令以忽略您要插入的命令,但仍需要定期优化。
2)由于您的团队已编号,如果只使用了少数团队编号,您可能需要查看使用员工表上的SET。然后,您只需要执行更新命令。
3)如果SET太小,您可能需要查看其中一个INT列并一起使用二进制数字。例如,团队1为2 ^ 1,团队2为2 ^ 2,...然后当您更新团队成员资格的员工表上的INT列时,您将更新它以表示他们所属团队的价值(例如,UPDATE人员SET团队= 2 ^ 1& 2 ^ 2& 2 ^ 3)。这将允许您仅使用数字搜索匹配。
这些是我想到的潜在优化,虽然没有一个直接回答你的具体问题,但他们确实解决了这个问题。