2015-12-29 55 views
-2

我想從.csv文件導入一些條目到我的實際數據庫中。我已經做了一千次沒有任何問題。從昨天開始,我無法再導入它。來自.csv文件的PHP導入條目 - MySQL查詢問題

我總是收到此錯誤:

Error Number: 1242 

Subquery returns more than 1 row 

UPDATE preturi_import I SET I.art_id = (SELECT ART_ID FROM tof_articles WHERE I.art_nr = ART_ARTICLE_NR AND I.sup_id = ART_SUP_ID) WHERE I.sup_id > 0 

Filename: /home/pieseaut/public_html/controllers/backend.php 

Line Number: 1647 

由於腳本工作得很好,直到昨天,我還沒有做劇本我真的不明白的問題可能是什麼做任何修改。

確切的MySQL查詢如下:

$sqlUpdate = "UPDATE preturi_import I SET I.art_id = (SELECT ART_ID FROM tof_articles WHERE I.art_nr = ART_ARTICLE_NR AND I.sup_id = ART_SUP_ID) WHERE I.sup_id > 0"; 

無論在的.csv文件是一個單個條目或幾十或幾百或幾千,我總是得到相同的錯誤在提到開始。

雖然有一個問題。由於一些愚蠢的原因,我的CentOS服務器上的/ tmp分區已滿,一些mysql表崩潰。我已經使用mysqlcheck和--repair選項來修復它們以及myisamchk。我重新啓動了mysql服務,我發現這些表沒有錯誤。

任何幫助真的appreaciated!

回答

2

錯誤非常明顯:您的SELECT ART_ID FROM tof_articles WHERE I.art_nr = ART_ARTICLE_NR AND I.sup_id = ART_SUP_ID查詢會返回至少一個CSV行的多個結果。

我建議在回答CSV行之前查詢,當錯誤發生的時候,你會知道這行是否會引起問題。當你得到它,檢查你的數據庫。

+0

我知道這個錯誤很明顯。問題是2天前相同的文件工作得很好。無論如何,昨天我發現了這個錯誤。我檢查了數據庫和那張表,一切看起來都很好。我的.csv文件中只有一行,錯誤仍然相同。莫名其妙地將數據庫中的相同條目存入數據庫兩次? –

+1

既然你只有一行,那麼運行SELECT ART_ID FROM tof_articles WHERE I.art_nr = ART_ARTICLE_NR和I.sup_id = ART_SUP_ID查詢本身(取代當前需要的值),如果你有一個重複的行,它會被返回由數據庫。 – Growiel

+0

看來,當我運行這個簡單的更新sql語句出現錯誤: 'UPDATE preturi_import I SET I.art_id =(SELECT ART_ID FROM tof_articles WHERE I.art_nr = ART_ARTICLE_NR AND I.sup_id = ART_SUP_ID)WHERE I.sup_id> 0 ' 它與從.csv文件導入無關!感謝提示! –