2014-06-18 2 views
0

Есть две таблицы:обновление таблицы SQL на основе значения в другой таблице в PHP

 orders 
____________________ 
order_id | Stat 
-------------------- 
    1  | waiting 
    2  | waiting 
    3  | waiting 

второй стол:

 product 
____________________ 
order_id | product_id 
--------------------- 
    1  |  53 
    2  |  54 
    3  |  54 

значение order_id одинакова в обеих таблицах. Я хотел бы обновить Stat от «ожидания» до «done» в таблице Orders, если product_id равен «54» в таблице Product.

Я попробовал этот код, но не получилось:

mysql_query("UPDATE orders SET stat='done' FROM product WHERE product_id='54'"); 

оценит вашу помощь :)

+0

Пожалуйста, пожалуйста _please_ stop, используя расширение 'mysql_ * '. Он устарел, уведомляет о проблемах, небезопасен, не поддерживается и будет удален в будущем. Используйте 'mysqli_ *' или 'PDO' вместо –

+0

Спасибо за консультацию. Вы имеете в виду, что я должен использовать его так? mysqli_query – PersianHero

+0

Да, но вы должны _learn_ альтернативные расширения, потому что, хотя на первый взгляд 'mysqli_ *' очень похож на 'mysql_ *', они не переводят 1 на 1: новые расширения немного сложнее и намного более мощный. –

ответ

4

Вы должны использовать JOIN то как

update orders 
join product on product.order_id = orders.order_id 
set 
orders.Stat='done' 
where product.product_id = '54' 
+0

, а также использовать order.Stat, как он существует в таблице заказов - так с большой буквы. – Bogdan

+0

@Bogdan благодарит за уведомления обновил (а) :) –

+0

@AbhikChakraborty: Brilliant. Большое спасибо mate :) – PersianHero

0
do this it work for u 

mysql_query("UPDATE orders SET stat='done' where product_id in (select product_id from product WHERE product_id='54'"); 
+0

@mihir grate work :) –

+0

это не сработало :( – PersianHero

0

Если вы хотите, чтобы эта логика была встроена в БД, вы могли бы использовать триггер обновления, подобный ниже (псевдокод):

CREATE TRIGGER upd_check BEFORE UPDATE ON product 
FOR EACH ROW 
BEGIN 
    IF NEW.product_id = 54 THEN 
     UPDATE orders SET Stat = 'done' WHERE order_id = NEW.order_id 
    END IF; 
END; 
Смежные вопросы