2013-07-13 91 views
1


我正在處理一個應用程序,其中的網站管理員可以上傳Excel工作表上傳數據到數據庫。 Offcourse我使用this優秀的庫上傳文件到我的mysql數據庫。
消除重複的條目,同時上傳excel文件到mysql

問題:這一切工作正常,但現在的問題是,如果管理員上傳一個名單,我必須拿出管理頁面上上傳的數據,並要求他通過點擊一個按鈕來確認上載。確認點我將數據存儲在DB中的一個臨時表中。一旦管理員確認,我將它移動到DB中的永久表並刪除臨時表中的條目。如果管理員編輯了相同的excel,即他添加了更多記錄並再次上傳,之前的記錄得到重複,這不應該發生。

我想檢查來自excel文件的記錄是否已經存在(基於與每條記錄相關的唯一id)。這不是主要關鍵,但不是。與數據庫中的每條記錄和Excel表單相關聯。

我在尋找關於如何檢查記錄是否已經存在的建議,因爲我刪除了臨時表信息。我可以每次上傳時將臨時表數據(,如果未刪除)與文件數據進行比較嗎? 如何檢查文件記錄是否與數據庫中的記錄類似,並只上傳新添加的記錄?

任何建議,將有助於走正確的道路。
感謝您的關注

+2

如果您已將記錄存儲在臨時表中,則可以運行內部聯接查詢來識別重複記錄,並根據需要向用戶突出顯示或自動刪除。 – Pynner

回答

1

要識別新記錄,請在臨時表和永久表上使用左或右連接(您的首選項)將新記錄插入永久表中。您也可以使用此技術來確定是否需要從永久表中刪除記錄。

使用內部連接來執行更新當前在數據庫中的記錄,@Pynner在他之前的評論中指出。

見這個答案留給如何使用說明和右連接等Is there any way to check whether or not the query inside a MySQL trigger returns an empty set?

+0

將檢查並回復。感謝您的回覆! – KillABug

+0

@KillABug做了這項工作? – Namphibian

+0

工作一些其他的東西。一旦我嘗試它,肯定會接受答案。 – KillABug

1

您可以使用插入忽視,這將忽略重複記錄中提供適當的唯一索引應用。這將忽略已插入的條目並僅添加新條目。這是你想要我猜

所有你需要做的是,而不是 INSERT INTO tbl_name(col1,col2)VALUES(val1,val2); INSERT IGNORE INTO tbl_name(col1,col2)VALUES(val1,val2); do INSERT IGNORE INTO tbl_name(col1,col2)VALUES(val1,val2); 這應該停止重複並只插入新條目。請注意,這依賴於適當的索引。

+0

您能否詳細說明並共享該示例的鏈接? – KillABug