-1

我有一个场景: 在此处输入图像描述

  • 用户 A 是(欺诈者)。
  • 用户 B 不是(欺诈者)。但是,系统将不允许用户 B 执行任何操作。因为 B 和 A 使用相同的电话号码(与欺诈用户共享属性)。(1 层)。
  • 用户 D 不是(欺诈者)。但是 D 与 B 使用相同的 Deviceid 并且 B 与欺诈用户共享属性。然后也阻止用户 D。在这种情况下,有 2 层。D 与 B 比较,B 与 A 比较。在此示例中,有 3 个用户。如果我有 100 个用户!查询会很长,有 99 层。

*注意:我不想更新 B 和 D 成为欺诈者。它们只是与欺诈用户共享的属性。因此,如果我决定将用户 A 更改为不是欺诈者。与其他用户没有任何变化。

4

1 回答 1

2

老实说问题很抽象,所以需要做一些假设如下,

  1. 假设数据库服务器为 MySQL
  2. 考虑到这一点,欺诈者账户的数据已经存在于表中。
  3. 字段的重复MobileNo OR DeviceId OR EmailId OR IPAddress决定了fradster。

所以回答你的问题,

  1. AfterUpdate您的table.
  2. 在该触发器Fetch和行中,那些具有OR OR ORUpdate重复值的行。MobileNo DeviceId EmailId IPAddress

仅在 ,NEW.IsFraudsterStatus = 1时触发更新查询

if (NEW.IsFraudsterStatus = 1) THEN
     UPDATE tableUser
     SET IsFraudsterStatus = 1
     WHERE 
          (tableUser.MobileNo = NEW.MobileNo
          OR
          tableUser.DeviceId = NEW.DeviceId
          OR
          tableUser.EmailId = NEW.EmailId
          OR
          tableUser.IPAddress = NEW.IPAddress)
         AND
          IsFraudsterStatus = 0; 
ELSE
     UPDATE tableUser
     SET IsFraudsterStatus = 0
     WHERE 
          (tableUser.MobileNo = NEW.MobileNo
          OR
          tableUser.DeviceId = NEW.DeviceId
          OR
          tableUser.EmailId = NEW.EmailId
          OR
          tableUser.IPAddress = NEW.IPAddress)
         AND
          IsFraudsterStatus = 1;
END IF;

在上面的查询中,您可以根据conditions需要添加任意数量的内容,请注意,OR如果任何条件为真,则该帐户是欺诈者。

  1. 一旦上述查询被触发,它将重复更新所有此类帐户,例如Fraudster。请注意ANDed 条件,它将防止无休止的递归触发。

除此之外,我会推荐一个BeforeInsert触发器,它将验证和限制创建欺诈者帐户。

于 2020-06-22T05:04:03.073 回答