经过几个小时的尝试,我需要你的建议。
我想要合并来自2个表的行。 在table1中创建了一个新行后,我想在table2中找到一行并组合一些字段。
如果我将嵌套的SELECT放在SET函数中 (SET postcode =(SELECT etc) 是有效的,但是如果我把它放在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/>';
}
答案 0 :(得分:1)
这不是一个有效的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有点那样)。
编辑: 如果您需要邮政编码表中的许多字段,您可以加入:
$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也只返回1行,所以没有必要。
答案 1 :(得分:0)
试试这个:
$sql2 = "UPDATE instanties
SET postcode_id=(
SELECT postcode_id
FROM postcode
WHERE $where LIMIT 1)
WHERE id=$last";