php sql 更新嵌套 FROM (SELECT)
php sql UPDATE with nested FROM (SELECT)
经过几个小时的尝试,我需要你的建议。
我想合并 2 个表中的行。
在 table1 中创建新行后,我想在 table2 中找到一行并合并一些字段。
如果我把嵌套的 SELECT 放在 SET 函数中
(设置邮政编码=(SELECT等)
是有效的,但是如果我把它放在 FROM 函数中会给出语法错误的错误
我的代码:
$sql = "INSERT INTO instanties(institution, category, postcode)
VALUES('$emapData[0]', '$emapData[1]', '$emapData[2]')";
if ($conn->query($sql) === TRUE) {
//get last added id
$last = $conn->insert_id;
//define WHERE function
$where="postcode_id=$postcode_id AND (minnumber <= $number AND maxnumber >= $number)";
//UPDATE last added row in table with info from other table
$sql2 = "UPDATE instanties
SET postcode_id=pc.postcode_id
FROM
(
SELECT postcode_id
FROM postcode
WHERE $where LIMIT 1
) pc
WHERE id=$last";
$result = $conn->query($sql2);
if ($result) {
echo 'update is done<br/><br/>';
}
}
else {
echo "Error: " . $sql2 . "<br>" . $conn->error.'<br/><br/>';
}
}
else {
echo "Error: " . $sql . "<br>" . $conn->error.'<br/><br/>';
}
试试这个:
$sql2 = "UPDATE instanties
SET postcode_id=(
SELECT postcode_id
FROM postcode
WHERE $where LIMIT 1)
WHERE id=$last";
这不是有效的 MySQL 语法。您不能将 "FROM" 子句添加到 UPDATE 语句。
http://dev.mysql.com/doc/refman/5.0/en/update.html
但是,您仍然可以通过这种方式完成您想要完成的事情:
$sql2 = "UPDATE instanties
SET postcode_id=
(
SELECT postcode_id
FROM postcode
WHERE $where LIMIT 1
)
WHERE id=$last";
只要嵌套的 SELECT 中只有 1 个结果(并且您的 LIMIT 1 有点这样做)。
编辑:
如果您需要邮政编码table的许多字段,您可以加入:
$sql2 = "UPDATE instanties as i
JOIN (
SELECT *
FROM postcode
WHERE $where LIMIT 1
) as pc
SET i.postcode_id=pc.postcode_id
WHERE i.id=$last";
我们通常会在连接中使用 "ON" 子句,但由于您只更新 1 行,而嵌套的 SELECT 也将只更新 return 1 行,所以它不是有必要。
经过几个小时的尝试,我需要你的建议。
我想合并 2 个表中的行。 在 table1 中创建新行后,我想在 table2 中找到一行并合并一些字段。
如果我把嵌套的 SELECT 放在 SET 函数中 (设置邮政编码=(SELECT等) 是有效的,但是如果我把它放在 FROM 函数中会给出语法错误的错误
我的代码:
$sql = "INSERT INTO instanties(institution, category, postcode)
VALUES('$emapData[0]', '$emapData[1]', '$emapData[2]')";
if ($conn->query($sql) === TRUE) {
//get last added id
$last = $conn->insert_id;
//define WHERE function
$where="postcode_id=$postcode_id AND (minnumber <= $number AND maxnumber >= $number)";
//UPDATE last added row in table with info from other table
$sql2 = "UPDATE instanties
SET postcode_id=pc.postcode_id
FROM
(
SELECT postcode_id
FROM postcode
WHERE $where LIMIT 1
) pc
WHERE id=$last";
$result = $conn->query($sql2);
if ($result) {
echo 'update is done<br/><br/>';
}
}
else {
echo "Error: " . $sql2 . "<br>" . $conn->error.'<br/><br/>';
}
}
else {
echo "Error: " . $sql . "<br>" . $conn->error.'<br/><br/>';
}
试试这个:
$sql2 = "UPDATE instanties
SET postcode_id=(
SELECT postcode_id
FROM postcode
WHERE $where LIMIT 1)
WHERE id=$last";
这不是有效的 MySQL 语法。您不能将 "FROM" 子句添加到 UPDATE 语句。 http://dev.mysql.com/doc/refman/5.0/en/update.html
但是,您仍然可以通过这种方式完成您想要完成的事情:
$sql2 = "UPDATE instanties
SET postcode_id=
(
SELECT postcode_id
FROM postcode
WHERE $where LIMIT 1
)
WHERE id=$last";
只要嵌套的 SELECT 中只有 1 个结果(并且您的 LIMIT 1 有点这样做)。
编辑: 如果您需要邮政编码table的许多字段,您可以加入:
$sql2 = "UPDATE instanties as i
JOIN (
SELECT *
FROM postcode
WHERE $where LIMIT 1
) as pc
SET i.postcode_id=pc.postcode_id
WHERE i.id=$last";
我们通常会在连接中使用 "ON" 子句,但由于您只更新 1 行,而嵌套的 SELECT 也将只更新 return 1 行,所以它不是有必要。