我有两个非常相似的脚本 - 一个预定脚本,另一个通过加载PHP页面触发 - 下载和解析电子邮件,然后将我需要的各种信息插入到3个表中。我一直在使用的查询的简化版本是:
INSERT INTO mailids () VALUES ();
SET @mysql_mid = LAST_INSERT_ID();
INSERT INTO mail (
mail_mid,
mail_owner_id,
mail_recipient,
mail_sender,
mail_subject,
mail_sent_date
) VALUES (
@mysql_mid,
'$userId',
'$recipient',
'$sender',
'$subject',
FROM_UNIXTIME('$sentDate')
);
SET @mysql_mail_id = LAST_INSERT_ID();
INSERT INTO mail_body (
mail_id,
mail_body
) VALUES (
@mysql_mail_id,
'$body'
);
UPDATE mailids SET mid_rec_ids = @mysql_mail_id WHERE mid_id = @mysql_mid;
除非两个脚本同时运行,否则这样工作正常,在这种情况下,两者都将电子邮件插入数据库,导致重复输入。
我希望做的是在我的multi_query的开头添加一个SELECT语句,后跟一个IF语句(我没有经验),如果电子邮件尚不存在,它只会执行上述查询。换句话说:
SELECT COUNT(*) AS mail_count FROM mail WHERE mail_owner_id = '$user_id AND mail_recipient = '$recipient' AND mail_sender = '$sender' AND mail_subject = '$subject' AND mail_sent_date = '$sent_date';
IF mail_count < 1
THEN
(INSERT ABOVE QUERY HERE)
END IF
我没有尝试过任何工作。我已经尝试设置一个变量(@mail_count),使用WHERE NOT EXISTS(由于某种原因,使用我的user_id插入一些等于所有记录的记录)和大约100个其他我不记得的事情。我考虑过使用PDO,但项目的其余部分是mysqli,我担心PDO在这个项目时间表中的学习曲线。
有人可以帮忙吗?