在验证表上的电子邮件时遇到问题

mm9b1k5b  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(411)

我要做的是验证触发器上某个寄存器的电子邮件。例如,如果一个客户是第一次注册,它应该创建一个名和姓都有的电子邮件(例如:user)。last@email.com)但是,如果已经有一个注册者使用相同的名字,它应该以相同的方式创建电子邮件,在客户id后面加上名字和姓氏(例如:user)。last2@email.com).
到目前为止,我掌握的代码如下:

delimiter $
create trigger before_customer_insert
before insert on customer
for each row
begin
 declare emailVal varchar(45);
 declare checkData int;
 declare checkData2 int;

 set checkData = (select count(first_name) from customer where first_name = new.first_name);
 set checkData2 = (select count(last_name) from customer where last_name = new.last_name);
 if((checkData = 1) and (checkData2 = 1)) then
    set new.email = (concat(new.first_name,'.', new.last_name, '@sakilacustomer.org'));
 else
    set new.email = (concat(new.first_name,'.', new.last_name, new.customer_id, '@sakilacustomer.oeg'));
 end if;

 if(new.kind_customer is null) then
    set new.kind_customer = '1';
 end if;

 set new.active = 1;
 end $

我遇到的问题是,当它第一次注册时,它会插入电子邮件,但带有一个0,例如“name”。last0@email.com“如果我尝试插入相同的信息,就会显示相同的电子邮件。我试图改变if语句中的逻辑,但仍然显示出相同的问题。

ngynwnxp

ngynwnxp1#

你的逻辑是落后的。您有:

if((checkData = 1) and (checkData2 = 1)) then

但你想:

if((checkData = 0) and (checkData2 = 0)) then

当数据库中没有任何具有这些名称的现有记录时,您希望使用不带客户id的名称。
注意,我不确定你的支票寻找名字和姓氏分别是完全你想要的。你不想检查一下整个地址是否都找到了吗?
按照写的方式,如果一个叫joe bloggs的人试图加入,他就是joe.bloggs1,如果系统中还有其他人叫joe,即使没有其他的joe bloggs。

相关问题