The*_*Guy 12 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);
Run Code Online (Sandbox Code Playgroud)
我正在努力的是一种更新我选择的记录的方法,一旦选中我需要更改,status = '1'以便下次我的脚本运行时它不会在选择中提取相同的数据而只会提取新的项目具有状态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);
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*ell 18
只要UPDATE你SELECT同时做它.
改变这个:
SELECT product_name, sku, qty
FROM supplier_dropship_items
WHERE supplier_id = '3' AND status = '2';
Run Code Online (Sandbox Code Playgroud)
对此:
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;
Run Code Online (Sandbox Code Playgroud)
这假设您的表中有一个ID列,因为它应该如何设置以及任何规范化表的外观.
如果supplier_dropship_items有一个主键(它应该),那么在那里包含那些字段SELECT,然后,当你循环结果时,UPDATE使用主键执行一个设置status,如:
UPDATE supplier_dropship_items SET status=1 WHERE <id_field>=<id_value>;
Run Code Online (Sandbox Code Playgroud)
这假设您没有在并发环境中执行.如果是,那么您应该使用锁定更新记录SELECT... FOR UPDATE.你可以在这里阅读它.据我所知,这可以在InnoDB表的MySQL下运行.