[英]How to update row data then insert the latest data on mysql
我有“主頁”表來保存將 csv 文件導入到 phpMyAdmin 的所有數據。 起初,該表不包含任何數據,我導入了一個包含字段(home_id、name 和 count)的 csv 文件。 該表的附加字段“狀態”默認為 1,並且 home_id 設置為唯一鍵。 現在表'Home'有數據。
home_id | 姓名 | 計數 | 地位
H1 | 公寓 | 3 | 1
H2 | 公寓 | 6 | 1
H3 | 山寨 | 4 | 1
接下來,我導入相同的 csv 文件,但更新了“計數”的值。 通過使用INSERT INTO....DUPLICATE KEY UPDATE
,我設法更新具有相同 home_id 的行並將“狀態”設置為 0。
home_id | 姓名 | 計數 | 地位
H1 | 公寓 | 8 | 0
H2 | 公寓 | 9 | 0
H3 | 山寨 | 4 | 1
但我想在更新前后保存數據,例如下表。
home_id | 姓名 | 計數 | 地位
H1 | 公寓 | 3 | 1
H2 | 公寓 | 6 | 1
H1 | 公寓 | 8 | 0
H2 | 公寓 | 9 | 0
H3 | 山寨 | 4 | 1
我意識到我不能將“home_id”設置為唯一鍵,因為它不允許保存相同的“home_id”。 我有什么辦法嗎? 我仍然無法弄清楚這一點。
附加:在我INSERT INTO...ON DUPLICATE KEY UPDATE
到 'Home' 表之前。 我將LOAD DATA INFILE
到臨時表中,'Home_Temp' 包含字段(home_id、名稱和計數)。 然后我INSERT INTO
到 'Home' 表包含字段(home_id、名稱、計數和狀態)。 'Home_Temp' 表是在用戶單擊按鈕導入文件並在插入過程后刪除到 'Home' 表時創建的。
在@Nick 的幫助下,我找到了解決這個問題的想法。 我添加了自動遞增的字段“id”。 此查詢將根據 id 查找最高的 home_id,並將狀態更新為“0”。
$sql = "UPDATE Home h1 INNER JOIN (
SELECT home_id, MAX(id) AS max_id
FROM Home GROUP BY home_id) h2
ON h1.home_id = h2.home_id
AND h1.id = h2.max_id
SET h1.status = '0'";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.