我想使用單個查詢來更新MySQL表中的多個記錄。基本上,這是一個任務表,它爲不同日期的不同人員分配任務。當這些分配被改變並通過在線表單提交時,會有很多POST數據被提交(幾乎所有待處理的分配)。我已經寫了整理着所有這些信息,並得到我想出來的是什麼算法,但我卡上書寫的查詢,更新MySQL表:如何使用單個MySQL查詢更新表中的多個記錄?
// Find the modified records and save their information
$update = 0;
for ($n = 0; $n < $total_records; $n++)
{
if ($_POST['update'.$n] == true)
{
$updates_arr[$update] = array(intval($_POST['user_id'.$n]), intval($_POST['task'.$n]), $_POST['date'.$n]);
$update++;
}
}
if ($mysql_db = OpenDatabase())
{
$query = "UPDATE tasks_tbl";
if ($updates_arr[0])
{
$query .= " SET task = ".$updates_arr[0][1]." WHERE user_id = ".$updates_arr[0][0]." AND date = ".$updates_arr[0][2];
}
for ($n = 1; $n < $updates; $n++)
{
$query .= ", SET task = ".$updates_arr[$n][1]." WHERE user_id = ".$updates_arr[$n][0]." AND date = ".$updates_arr[$n][2];
}
$result = mysql_query($query, $mysql_db);
if ($result)
{
$page .= "<p>Success!</p>\n\n";
}
else
{
$page .= "<p>Error: ".mysql_error()."</p>\n\n";
}
}
這是生成的查詢:
UPDATE tasks_tbl
SET task = 1
WHERE user_id = 16
AND date = 2010-05-05,
SET task = 1
WHERE user_id = 17
AND date = 2222-02-22
任何意見,將不勝感激。謝謝。
對於真正大量的插入,可能有利於對臨時表執行批量INSERT,然後使用臨時表中的值更新目標表。 – 2009-12-14 18:32:03
你爲什麼要這樣做?如果只有其中一個失敗,您將面臨不更新多個項目的風險。將個別交易陷入困境並不是更好,因此可以將它們顯示給用戶嗎? – 2009-12-14 18:34:41
算法比我在這裏展示的還多。在運行查詢之前,所有數據都經過驗證,所以不應該存在無效數據可能導致查詢失敗的實例。 – 2009-12-14 18:45:36