我有一个用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);
}
答案 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下运行。