MySQL IF Case Exists 检查用户是否已附加

标签 mysql sql

您好,我需要用户能够通过输入唯一的案例代码来注册对案例表中案例的访问权限。数据库需要检查案例代码是否存在,以及是否使用其 id 来查看用户是否已注册

cases
        +----+-----------+-------------+
        | id | case_code |  case_name  |
        +----+-----------+-------------+
        |  1 | THEC12C   | Test Case 1 |
        |  2 | ABCD23A   | Test Case 2 |
        +----+-----------+-------------+

case_creditors
        +----+---------+-------------+
        | id | case_id | creditor_id |
        +----+---------+-------------+
        |  1 |       1 |           3 |
        |  2 |       2 |           1 |
        +----+---------+-------------+

因此,如果债权人 1 尝试添加 THEC12C,它将向案例用户添加一条记录

case_creditors
+----+---------+-------------+
| id | case_id | creditor_id |
+----+---------+-------------+
|  1 |       1 |           3 |
|  2 |       2 |           1 |
|  3 |       1 |           1 |
+----+---------+-------------+

如果他们尝试再次添加相同的案例,它将返回一行,以便我可以告诉 php 该用户已经注册了此案例

我知道我可以使用两个查询来完成此任务 1) 案例代码是否存在于案例表中 - true/False 2) 如果为 true,case_creditors 中是否有记录 - true/false 3} 如果为 true,则“已注册;如果为 false,则将记录的 case_id 和 Creditor_id 添加到 case_creditors”

最佳答案

我会采取完全不同的方式。

  1. 创建单个 unique indexcase_creditors 表中的 case_idcreditor_id 字段上。这将防止插入重复记录。

  2. 使用以下insert ... select ...查询将数据插入case_creditors`表中。

如果返回时出现重复键错误,则案例已分配给债权人。如果受影响的行为 0,则 case_code 不存在。如果受影响的行为 1,则案例分配给债权人:

insert into case_creditors (case_id, creditor_id)
select id, ... from cases where case_code='...'

用债权人 ID 代替第一个 ...,用案例代码代替第二个 ...

关于MySQL IF Case Exists 检查用户是否已附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43058639/

相关文章:

sql - 与 SQLWhere 过滤器作斗争

mysql - 具有多个子句的 SQL 查询

c# - 处理 SQL 时间数据类型

php - SQL Comment表插入语句

mysql - 选择包含大多数特定条目的列表

mysql - SQL正则表达式过滤器

php - 从不在第二个表中的表中获取用户名

mysql - 带有计数的 SQL 选择查询

SQL Server Management Studio错误 "Saved settings file cannot be found"

sql - 在嵌套的 postgresql 函数中使用来自父级的变量?