首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL条件插入。可以在phpMyAdmin脚本中运行,但不能在PHP脚本中运行

问MySQL条件插入。可以在phpMyAdmin脚本中运行,但不能在PHP脚本中运行
EN

Stack Overflow用户
提问于 2010-12-19 11:19:51
回答 3查看 2.2K关注 0票数 0

我正在尝试从PHP脚本创建一个条件插入到我的MySQL数据库中。下面的SQL语法在phpMyAdmin中有效,但在我的PHP脚本中不起作用:

代码语言:javascript
复制
INSERT INTO profiles (id, firstname)
SELECT "22","John" from profiles
WHERE NOT EXISTS (
SELECT * FROM li_profiles
WHERE li_p_firstname = "John"
)

(请注意,id是主键,firstname不是键,也不是唯一键)

奇怪的是,当我在phpMyAdmin中运行SQL时,虽然它确实“工作”(意思是添加了一个id为" 22“、名字为”John“的新记录),但我得到了以下警告:"#1062 - Duplicate entry '22‘for key 1”,但该表之前没有id为22的条目。??!!

到底怎么回事?

EN

回答 3

Stack Overflow用户

发布于 2010-12-19 11:37:29

将SELECT更改为VALUES

代码语言:javascript
复制
INSERT INTO profiles (id, firstname) VALUES("22","John") FROM profiles WHERE NOT EXISTS ( SELECT * FROM li_profiles WHERE li_p_firstname = "John" )

此外,如果使用的是自动增量值,则应指定下一个值。同样,如果它是一个整数,给出一个整数(22)而不是一个字符串("22")

票数 0
EN

Stack Overflow用户

发布于 2010-12-19 17:15:42

您将得到一个重复的iD条目,因为您将为profiles表中的每一行插入一个新行;对于profiles表中的每一行,li_profiles表中没有John。你可以试试

代码语言:javascript
复制
INSERT INTO profiles (id, firstname)
    SELECT "22","John" from profiles
        WHERE NOT EXISTS (SELECT * FROM li_profiles
                              WHERE li_p_firstname = "John")
        LIMIT 1;

这将消除重复的问题(如果它工作,对不起,但我没有检查过这个)。

票数 0
EN

Stack Overflow用户

发布于 2010-12-19 23:13:43

我用一种不同的方式解决了这个问题。(我被告知HAVING语句很慢,所以我不确定这是不是最好的方法……但这是我工作的唯一方法。)

代码语言:javascript
复制
INSERT INTO profiles (id,firstname)
SELECT 22,'John'
FROM li_profiles
WHERE firstname = 'John'
HAVING COUNT(*) = 0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4481433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档