我不知道我的查询有什么问题,这个子查询在使用select时运行正常,但是当更新它不起作用时,我如何为更新查询创建子查询?
$query = "UPDATE `product`
SET `default` = '0'
WHERE `product_name` = (
SELECT `product_name`
FROM `product`
WHERE `product_id` = {$_GET['bag']}
) AND `product_id` != {$_GET['bag']};
";
$ result = mysqli_query($ connection,$ query);
答案 0 :(得分:1)
MySQL不允许您引用您在子查询中更新的同一个表。您必须使用UPDATE product AS p1
JOIN product AS p2 ON p1.product_name = p2.product_name
SET default = '0'
WHERE p2.product_id = {$_GET['bag']}
AND p1.product_id != {$_GET['bag']}
。
var opts = $("select > option:not(:first-child)");
var texts = [];
$.map(opts, function(val, key){
texts.push(val.innerText);
});
顺便说一句,你还应该学习使用准备好的查询而不是变量替换来防止SQL注入。
答案 1 :(得分:0)
@Barmar打败了我,但这是我的回答。
UPDATE `product`
INNER JOIN `product` AS `p` ON `p`.`product_name` = `product`.`product_name` AND `p`.`product_id` = {$_GET['bag']}
SET `default` = '0'
WHERE `product`.`product_id` != {$_GET['bag']};