1

我已经搜索了很长时间,但我没有找到我的问题的答案。首先让我解释一下我的问题来自哪里。

我有一个具有用户表单的 Web 应用程序,用户可以在其中指定他/她在一周中的哪几天有空以及这几天的办公时间。将其想象为一个 web 表单,其中包含 mo-su 复选框以及每个复选框/天的从时到时下拉列表。现在,如果将用户配置文件插入到数据库表中,我的表中有类似的内容:

idUser | idDay | fromTime | toTime

     1 |     0 |    08:00 |  09:00

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

当然还有更改用户资料的功能。因此,可能首先用户从早上 5 点到下午 3 点有空。现在配置文件已更改,因此用户只能在上午 5 点到下午 3 点使用,而我们只到下午 1 点和上午 9 点到下午 5 点,在这种情况下,我必须更新现有条目,以删除已删除的条目(本例中为周二)并插入新的可用天数。

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

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

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

4

2 回答 2

0

您不能在 1 个查询中执行INSERTAND UPDATEAND 。DELETE

你有一些选择:

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

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

于 2012-09-30T14:19:40.760 回答
0

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

于 2012-09-30T14:36:26.650 回答