Php 满足条件时自动删除数据库行(SQL)

Php 满足条件时自动删除数据库行(SQL),php,sql,Php,Sql,我需要在满足特定条件时自动删除表中的行。还有其他类似的问题,但我相信他们的答案不适用或过时 Anyhoo- 在我的数据库中,我有一个跟踪玩家统计数据的表,每个玩家都有一个基于“游戏”的合同。当他们签约时,他们会根据合同选择他们想玩的游戏数量,比如说20场。每场比赛结束后,它被勾选下来,直到它达到零。这里是我希望删除该行的位置。合同到期时 据我所知,我有两个选择 1) 安排一个cron每天运行以删除它们。 2) 每一次改动后都要检查左栏的游戏 当然,对于1),它不是即时的,这并不理想。有了2),似

我需要在满足特定条件时自动删除表中的行。还有其他类似的问题,但我相信他们的答案不适用或过时

Anyhoo-

在我的数据库中,我有一个跟踪玩家统计数据的表,每个玩家都有一个基于“游戏”的合同。当他们签约时,他们会根据合同选择他们想玩的游戏数量,比如说20场。每场比赛结束后,它被勾选下来,直到它达到零。这里是我希望删除该行的位置。合同到期时

据我所知,我有两个选择

1) 安排一个cron每天运行以删除它们。 2) 每一次改动后都要检查左栏的游戏

当然,对于1),它不是即时的,这并不理想。有了2),似乎。。。必须有另一种更雄辩的方式来完成这项任务

我们正在使用MariaDB和SQL


有人能帮忙吗?:)

可以使用视图使行不可见:

create view v_playerstats as
    select ps.*
    from playerstats ps
    where  ps.numgames > 0;
您可以通过此视图访问所有数据。您甚至可以对其进行排列,以便用户可以访问视图,但不能访问基础表

然后,您可以随意删除这些行

另一种方法是创建一个
update
触发器——您可能正在使用
update
来减小该值。当值变为0时,触发器可以删除该行(或将其移动到另一个表)


实际上我更喜欢第一种方法。如果数据库中有高峰期,它允许您将
delete
操作移动到较安静的时间。

为什么不在代码中检查它?与更新表之前一样,检查是否还有游戏剩余,如果没有,则删除该行,而不是更新该行。是的,在更改games_left时检查该行,并在值变为0时删除该行。你会喜欢的。@Liorahaydon我们做不到。由于我们系统的性质,必须首先更新其统计数据。更新后删除意味着我们可以立即删除。如果他们在没有合同的情况下留在“名册”上,这将导致内部和公共问题:/@BobRodes为Bob干杯!谢谢你。是的,那篇文章确实很有趣。哑代码很好,但有时会有这样的感觉:“我认为我不需要为此编写哑代码”,如果这有意义的话?很难找到平衡你实际上是在说,一定有比每次改变数据时评估一个条件更优雅的东西,因为这种条件并不经常发生。如果有条件地更新某些内容,那么每次更新时都必须检查条件。这一原则的一个更明显的例子是:在请求用户提供文件名时,没有一种更优雅的方法来处理“未找到的文件”错误,每次都要检查文件是否在那里,即使它通常在那里。我会使用view方法,但不幸的是,需要删除数据。如果他们不在谈判桌上,他们就是自由球员,这意味着他们可以代表其他人签约。不过我会用扳机的!非常感谢。