MySQL更新(如果存在),如果不存在则插入,如果不存在则删除(周计划配置文件)

时间:2012-09-30 14:11:55

标签: mysql

我已经搜索了很长一段时间,但我找不到我的问题的答案。首先让我解释一下我的问题来自何处。

我有一个网络应用程序,其中包含一个用户表单,用户可以在其中指定他/她可用的星期几以及当天的办公时间。想象一下,这是一个带有mo-su复选框的webform,以及每个复选框/日的即时,按时下拉菜单。现在,如果将用户配置文件插入到数据库表中,我在表中会有类似的内容:

idUser | idDay | fromTime | toTime

     1 |     0 |    08:00 |  09:00

(在这个例子中,0代表星期一(0 = mo - 6 = su))

当然,有一项功能可以更改用户个人资料。因此,有可能首先用户可以从早上5点到下午3点使用mo-fr。现在更改配置文件,以便用户只有mo,fr从早上5点到下午3点,我们只能到下午1点和上午9点到下午5点,在这种情况下,我必须更新现有条目,删除已删除的条目(在此示例中为tue)并插入新的可用日期。

现在我首先删除用户的所有条目,然后执行新插入。这很容易,在这种情况下可能是最好的事情(因为每个用户最多有7个条目)。但是,在优化查询可能更好的不同情况下,同样的问题可能会出现。

所以最后我的问题是:是否可以执行更新(如果存在),如果不存在则插入并仅删除一个查询中的所有其他条目?

我希望我的问题是可以理解的。

2 个答案:

答案 0 :(得分:0)

您无法在1个查询中执行INSERT AND UPDATEDELETE

你有一些选择:

  • MySql 中:编写处理问题的存储过程,并调用存储过程来执行任务。来自PHP的1次调用完成了工作。
  • PHP 中:编写一些代码来执行任务并将其包装在事务中。

如果你问什么是完成工作的最佳方法,你可能会开始一场战争。我把钱花在PHP解决方案上。

答案 1 :(得分:0)

最简单的方法是删除所有实例,然后为更新的条目创建新的计划。听起来你正试图对过程进行一些过早的优化,而恕我直言。如果您发现删除所有现有条目并替换它们是性能瓶颈,那么您可能需要考虑使用一种尝试最小化额外插入的方法但我认为这可能最终会比简单的选项更多地工作删除所有内容并将其替换