Php 带外键的MySQL插入查询

Php 带外键的MySQL插入查询,php,mysql,Php,Mysql,我想在表glmast中名为acname的字段中插入一个值 我使用的条件如下 g.gl_id = p.gl_id AND p.pl_id='$pdidedit' with g as glmast and p as packlist 我尝试了连接,并尝试以下代码 INSERT INTO glmast (acname) VALUES ('$glidnew') SELECT glmast.acname WHERE glmast.gl_id = packlist.gl_id AND packlist='

我想在表glmast中名为acname的字段中插入一个值

我使用的条件如下

g.gl_id = p.gl_id AND p.pl_id='$pdidedit' with g as glmast and p as packlist
我尝试了连接,并尝试以下代码

INSERT INTO glmast (acname)
VALUES
('$glidnew') SELECT glmast.acname WHERE glmast.gl_id = packlist.gl_id AND packlist='$pdidedit'";

非常感谢您的帮助。谢谢大家。

您可以像这样编写插入

INSERT INTO glmast (acname) VALUES ('$glidnew');


请记住,在第二个示例中,当select返回多行时,可能会有多个insert。

您可以像这样编写insert

INSERT INTO glmast (acname) VALUES ('$glidnew');


请记住,在第二个示例中,当select返回多行时,可能会有多个插入。

我想这可能就是您要做的:

INSERT INTO glmast(gl_id, acname)
SELECT '$glidnew', glmast.acname
FROM glmast JOIN packlist ON glmast.gl_id = packlist.gl_id
WHERE packlist.pl_id='$pdidedit'
你一直在说插入,但我很确定你指的是更新:

UPDATE glmast g
JOIN packlist p ON g.gl_id = p.gl_id
SET g.acname = '$glidnew'
WHERE p.pl_id = '$pdidedit'
或许就是这样:

INSERT INTO glmast (acname, col1, col2, col3, ...)
SELECT '$glidnew', g.col1, g.col2, g.col3, ...
FROM glmast g
JOIN packlist p ON g.gl_id = p.gl_id
WHERE p.pl_id = '$pdidedit'

我想这可能就是你想要做的:

INSERT INTO glmast(gl_id, acname)
SELECT '$glidnew', glmast.acname
FROM glmast JOIN packlist ON glmast.gl_id = packlist.gl_id
WHERE packlist.pl_id='$pdidedit'
你一直在说插入,但我很确定你指的是更新:

UPDATE glmast g
JOIN packlist p ON g.gl_id = p.gl_id
SET g.acname = '$glidnew'
WHERE p.pl_id = '$pdidedit'
或许就是这样:

INSERT INTO glmast (acname, col1, col2, col3, ...)
SELECT '$glidnew', g.col1, g.col2, g.col3, ...
FROM glmast g
JOIN packlist p ON g.gl_id = p.gl_id
WHERE p.pl_id = '$pdidedit'
我相信你正试图实现这样的目标

INSERT INTO glmast (acname) VALUES('$glidnew')
WHERE (
    SELECT glmast.acname FROM glmast GM
    JOIN packlist PL ON (PL.gl_id = GM.gl_id)
    WHERE PL.pl_id='$pdidedit'
)
但这种语法在MySQL中无效。 您必须首先运行SELECT语句,然后根据SELECT查询提供的结果集将其插入glmast表:

第1步:

SELECT glmast.acname FROM glmast GM
JOIN packlist PL ON (PL.gl_id = GM.gl_id)
WHERE PL.pl_id='$pdidedit'
INSERT INTO glmast (acname) VALUES({values from Step1})
第二步:

SELECT glmast.acname FROM glmast GM
JOIN packlist PL ON (PL.gl_id = GM.gl_id)
WHERE PL.pl_id='$pdidedit'
INSERT INTO glmast (acname) VALUES({values from Step1})
在某种程度上,您可以说,
$glidnew
表示步骤1中的值

我相信你正试图实现这样的目标

INSERT INTO glmast (acname) VALUES('$glidnew')
WHERE (
    SELECT glmast.acname FROM glmast GM
    JOIN packlist PL ON (PL.gl_id = GM.gl_id)
    WHERE PL.pl_id='$pdidedit'
)
但这种语法在MySQL中无效。 您必须首先运行SELECT语句,然后根据SELECT查询提供的结果集将其插入glmast表:

第1步:

SELECT glmast.acname FROM glmast GM
JOIN packlist PL ON (PL.gl_id = GM.gl_id)
WHERE PL.pl_id='$pdidedit'
INSERT INTO glmast (acname) VALUES({values from Step1})
第二步:

SELECT glmast.acname FROM glmast GM
JOIN packlist PL ON (PL.gl_id = GM.gl_id)
WHERE PL.pl_id='$pdidedit'
INSERT INTO glmast (acname) VALUES({values from Step1})


在某种程度上,您可以说,
$glidnew
表示步骤1中的值

您收到了什么错误消息?是插入到。。价值观选择valid syntax?我用一些输入值在phpadmin中进行了尝试。。它没有执行..@ajtrichards谢谢回复:)@karthikr-不,它无效。跳过该值,它将是。。几乎…@karthikr我不这么认为。。这就是为什么我想知道..你知道吗?你收到了什么错误消息?是
插入。。价值观选择
valid syntax?我用一些输入值在phpadmin中进行了尝试。。它没有执行..@ajtrichards谢谢回复:)@karthikr-不,它无效。跳过该值,它将是。。几乎…@karthikr我不这么认为。。这就是我想知道的原因。你知道吗?当你使用
SELECT
作为数据时,没有
VALUES
关键字。@user2234992,首先进行简单的选择,返回你想要的
acname
的值。在这之后,您可以像第二个示例中一样使用insert。当您使用
SELECT
作为数据时,没有
VALUES
关键字。@user2234992,首先进行简单的选择,返回
acname
所需的值。之后,您可以像第二个示例中那样使用insert。谢谢您的回复。。我想在glmast表的acname字段中插入$glidnew..希望我已清除..再次感谢您使用
选择glmast.acname的原因是什么?你确定不想更新而不是插入吗?是的,这是一个插入到新行的操作。我需要这样做@Barmer您是否试图从符合条件的行复制新行的所有其他字段?@user2234992-如果您向DB中的新行插入内容,您不能仅将一列更新为新行。您必须插入表中存在的所有列。感谢您的回复。。我想在glmast表的acname字段中插入$glidnew..希望我已清除..再次感谢您使用
选择glmast.acname的原因是什么?你确定不想更新而不是插入吗?是的,这是一个插入到新行的操作。我需要这样做@Barmer您是否试图从符合条件的行复制新行的所有其他字段?@user2234992-如果您向DB中的新行插入内容,您不能仅将一列更新为新行。您必须插入表中存在的所有列。为什么使用左联接?在第1步或第2步中,您没有使用
$glidnew
。@Barmar-当然不应该将其保留。谢谢(我用得最多,所以这只是一个习惯:-)$glidnew与步骤1中的值相同。我必须澄清一下,为什么要加入左派?在第1步或第2步中,您没有使用
$glidnew
。@Barmar-当然不应该将其保留。谢谢(我用得最多,所以这只是一个习惯:-)$glidnew与步骤1中的值相同。我必须澄清这一点。