php - 如果现有范围内不存在给定数字,则插入记录

标签 php mysql sql

假设我有一个这样的数据库结构。

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/

相关文章:

javascript - 自动在 HTML 字段类型中填充值=Web 表单的密码

php - "Personal Home Page"和 "PHP Hypertext Preprocessor"是什么 PHP?

SQL 在所有列中选择唯一的表行

Java,双返回函数,失败时返回什么?

php json_decode 和 Jquery Nestable

php - 从带有缩略图或介绍图片的 wordpress 数据库中选择帖子

mysql - 优化数据库查询

php - 在 codeigniter 中使用回调表单验证来比较日期

mysql - 节点红色错误 : Cannot create property '_msgid' on string

c# - 创建 Intranet 站点