MySQL - 选择然后更新

时间:2014-07-05 20:19:37

标签: mysql select sql-update

我有一个用PHP编写的脚本,该行具有正确选择我需要的数据的行;

$result = mysql_query("SELECT product_name, sku, qty FROM supplier_dropship_items WHERE supplier_id = '3' AND status = '2'", $db_beb);

我所挣扎的是一种更新我选择的记录的方法,一旦选中我需要更改status = '1',以便下次我的脚本运行时不会拉动select中的相同数据只会拉出表中状态为2的新项目。

这是我的工作结果,感谢下面接受的答案的评论;

$result = mysql_query("SELECT id, product_name, sku, qty FROM supplier_dropship_items WHERE supplier_id = '3' AND status = '2' FOR UPDATE", $db_beb); 

while($row = mysql_fetch_assoc($result)) 
{ 
    $sql_table_data[] = $row;
    mysql_query("UPDATE supplier_dropship_items SET status=1 WHERE id='".$row['id']."'", $db_beb); 
} 

2 个答案:

答案 0 :(得分:14)

只要UPDATE同时执行SELECT即可。

改变这个:

SELECT product_name, sku, qty 
FROM supplier_dropship_items 
WHERE supplier_id = '3' AND status = '2';

到此:

UPDATE supplier_dropship_items as t, 
(
    SELECT id, product_name, sku, qty 
    FROM supplier_dropship_items 
    WHERE supplier_id = '3' AND status = '2'
) as temp
SET status = '1' WHERE temp.ID = t.ID;

这假设您的表中有一个ID列,因为它应该如何设置以及任何规范化表的外观。

答案 1 :(得分:5)

如果supplier_dropship_items有主键(它应该),那么请在 SELECT 中包含这些字段,然后,当您循环显示结果时,执行 UPDATE 使用主键设置status,如下所示:

UPDATE supplier_dropship_items SET status=1 WHERE <id_field>=<id_value>;

这假设您没有在并发环境中执行。如果是,则应使用 SELECT... FOR UPDATE 锁定要更新的记录。你可以阅读它here。据我所知,这可以在InnoDB表的MySQL下运行。