簡體   English   中英

如何更新行數據然后在mysql上插入最新數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM