我有一個完整的培訓表。每個用戶都有一個用戶名。每個用戶可以完成許多課程。MySQL:插入或更新,如果存在,但不是基於關鍵列
該表具有以下標題:
+-------------------------+----------+---------+---------+---------+---------+-----------+
| recordnumber (KEY - AI) | username | type | course | status | started | completed |
+-------------------------+----------+---------+---------+---------+---------+-----------+
| int | varchar | varchar | varchar | varchar | date | date |
+-------------------------+----------+---------+---------+---------+---------+-----------+
而且我有一個PHP腳本設置填充從CSV分貝上傳。
我想要實現的是它添加新行,並更新現有的。
問題是,recordnumber(它們的鍵,唯一字段)不是恆定的。因此,我不想做一個「ON DUPLICATE KEY」查詢,而是基於用戶名和課程是否已經作爲一行存在。
基本上說:「如果這個用戶名已經有這個過程,更新其他字段。如果用戶名沒有這個過程,那麼把它作爲一個新行添加。
,我都不得不時刻(工作基於鍵)查詢是:
INSERT into table(recordnumber, username,type,course,status,started,completed) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]')
ON DUPLICATE KEY UPDATE username='$data[1]',type='$data[2]',course='$data[3]',status='$data[4]',started='$data[5]',completed='$data[6]'
對我怎麼能修改查詢任何想法是要檢查基於用戶名和過程,而不是複製來獲得鍵?
謝謝。 :-)
創建自己的「對重複KEY「型功能。你可以利用IF THEN語句來達到這個效果。請參閱:https://dev.mysql.com/doc/refman/5.5/en/if.html – abalos
在用戶名列上創建密鑰,然後在重複密鑰上使用 –
有許多建議和答案建議執行檢查你自己 - 請不要,這些例子中沒有一個是併發安全的 - 這意味着你可以(也很可能會)結束重複記錄。你應該做的是繼續使用'ON DUPLICATE KEY UPDATE'方法,但是你的密鑰是'UNIQUE(username,course)'而不是用戶名。 – Mjh