2015-09-22 2 views
0

Я не знаю, что случилось с моим запросом, этот подзапрос отлично работает при использовании select, но когда обновление не работает, как сделать подзапрос для запроса на обновление?MySQLi UPDATE с подзапросом не работает

$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);

ответ

1

MySQL не позволяет ссылаться на ту же таблицу, которую вы обновляете в подзапросе. Вы должны использовать JOIN.

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']} 

Кстати, вы должны также научиться использовать подготовленные запросы вместо замены переменных, чтобы предотвратить SQL-инъекцию.

+0

спасибо! я попробую это –

0

@ Бармар избил меня, но вот был мой ответ.

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']}; 
Смежные вопросы