你看我有这个查询:
$sql = "INSERT INTO visitor( visitor_username, email, PASSWORD )
SELECT * FROM ( SELECT '$username', '$email','$password')
AS tmp WHERE NOT EXISTS
(SELECT admin.admin_username, admin.email FROM admin AS admin
WHERE admin.admin_username = '$username' OR admin.email = '$email'
UNION SELECT staff.staff_username, staff.email FROM staff
AS staff WHERE staff.staff_username = '$username' OR
staff.email = '$email' ) LIMIT 1";
基本上,如果管理/员工表中不存在值(visitor_username、email),我们会插入这些值,它工作得很好而且很快,但好的解决方案并不总是带来彩虹。
如果我们无法在表中插入任何值,我将返回此错误消息
echo "User already exists. Please choose a different email address or username.";
由于我无法确定哪一个存在,因此我希望用户名或电子邮件地址返回特定大小写错误。
我应该拆分查询(一次选择,然后插入)还是有其他我在网上找不到的方法可以在同一查询中执行此操作?
我的目标是使用此查询返回特定的错误消息,例如:
“错误:用户名已存在” 或者 “错误:电子邮件已存在。”
感谢您提前检查并尝试帮助我!
最佳答案
我将创建两个查询或一个 MySQL 函数,它们将返回一些响应。如果您决定使用 MySQL 函数,请按照以下方法操作(根据您的目的调整以下查询):
delimiter $$;
create function `function_name`() returns integer deterministic
begin
select count(*) into a from `table` where 1 = 1;
if a > 0 then
insert into `table`(`col1`, `col2`) values('val1', 'val2');
select if(last_insert_id() > 0, 'response_200', 'response_500') into b from dual;
return b;
else
return 'response_501';
end if;
end $$
delimiter ;
您将像下面的查询一样调用此函数,并且您将仅获得具有上述输出之一的一条记录:
select `function_name`() as `response`;
关于php - 如何在 INSERT-SELECT 查询中返回 WHERE 语句中存在的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538925/