假设我有一个这样的数据库结构。
sp_frommem sp_tomem
1 1000
现在,如果我想插入一条新记录,其中 sp_frommem
为 5(示例),sp_tomem
为 750(示例),那么它将返回错误,例如“您无法插入数据库在此范围内,因为覆盖该范围的范围已经存在”。但是,如果我尝试插入一条新记录,其中 sp_frommem
是任何大于 1000 的数字(例如 1500),而 sp_tomem
是任何大于 sp_formem< 的数字
,那么记录插入应该成功。
现在假设表中有更多字段。
sp_frommem sp_tomem
1 1000
1500 4000
4001 7500
现在我可以在这里插入一条记录,其中包含从 1001 到 1499 的任何数字(因为这个范围仍然是空闲的)以及从 7501 到以上的任何数字。如何实现这一目标?我尝试检查以下查询,但它没有按预期工作。
$chk = $pdo->prepare("SELECT COUNT(*) as cnt FROM signup_promotion WHERE sp_frommem >= :from or sp_tomem <= :to");
$chk-> bindValue(':from', $from);
$chk-> bindValue(':to', $to);
$chk-> execute();
$chf = $chk->fetch();
if($chf['cnt'] > 0){
$msg = "<div class='alert alert-danger'>A Signup Bonus within the ranges mentioned already exists.</div>";
}else{
// INSERT RECORD HERE
}
最佳答案
SELECT COUNT(*) AS cnt FROM signup_promotion WHERE (:from BETWEEN sp_frommem AND sp_tomem) OR (:to BETWEEN sp_frommem AND sp_tomem)
应该可以工作。只需比较 cnt
是否等于 0(这就是冲突)。您还可以使用:
SELECT * FROM signup_promotion WHERE (:from BETWEEN sp_frommem AND sp_tomem) OR (:to BETWEEN sp_frommem AND sp_tomem)
并输出冲突,以便在时隙可用时向用户提供概览。
关于php - 如果现有范围内不存在给定数字,则插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49306773/