2014-11-03 87 views
1

我們確實有一個腳本,它可以自動將散列值從池中插入到文章中,只要它符合某些條件。這樣做的延伸是幾年前編制的,迄今運作良好。 現在它停止工作,沒有人知道爲什麼。經過很長時間的調試,我在SQL語句中發現了錯誤。MySQL ORDER BY與LIMIT 1結合返回空結果

生成的語句是這樣的:

SELECT `hash` 
FROM `table` 
WHERE `is_used` =0 
ORDER BY `uid` 
LIMIT 1 

如果我只是刪除了 「ORDER BY uid」,它再次工作。我只想知道爲什麼這發生在藍色之外。該主機說,系統方面沒有任何更改/更新,我檢查了所有相關文件,這些文件在去年都沒有更改。

關於系統。 TYPO3 4.5.2 PHP版本5.3.8-1〜dotdeb.1 MySQL版本57年1月5日

在此先感謝

編輯: 很抱歉的混亂。 隨着「停止工作」,我的意思是從一天到另一天,沒有哈希插入到文章中。 當我用ORDER BY執行語句時,我得到一個空行。 uid列仍然存在。系統上的任何內容都沒有變化,包括數據庫和表格。 我已經附加了一個圖像與表結構和兩個查詢結果在右邊(嗯,它沒有真正附加,因爲我需要更多的信譽附加它)。

爲了再次澄清我的問題:查詢工作之前,並返回一個散列。現在只有當我刪除ORDER BY並且我想知道這會如何發生時才起作用,因爲我很好奇,它可能會幫助我處理將來的錯誤。 http://i.stack.imgur.com/Dpip4.png

P.S:我編輯的表名,不要害怕;)

+2

編輯你的問題的代碼工作,而不是工作的例子。 「停止工作」作爲問題描述確實含糊不清。 – 2014-11-03 15:09:57

+0

SELECT'hash'沒有列出'uid' – Andrew 2014-11-03 15:10:35

+3

首先,你說你發現錯誤在那個SQL上。它是否有錯誤信息?其次,你的uid列還存在嗎? – 2014-11-03 15:10:56

回答

1

看你的屏幕打印,您是否仍有條款或不連續被返回的順序。

您正在使用LIMIT 1來僅返回一條記錄。當你有訂單條款時,你可以帶回最低uid的記錄。恰巧它有一個空白的散列值(可能在某個時候設置錯誤)。

我會試圖檢查WHERE子句中的散列不是空白。

SELECT `hash` 
FROM `table` 
WHERE `is_used` =0 
AND `hash` != '' 
ORDER BY `uid` 
LIMIT 1 
0

我現在感覺很無聊。當然這是一個簡單的答案,系統「不會停止工作」。 @Kickstart是對的,表中有一排空行。我沒有正確檢查表格。 當我在PhpMyAdmin中打開它時,出於某種原因,它不是由uid命令的(其他命令默認情況下是由uid命令的)。 我點擊了uid字段,並立即看到空行。 http://i.stack.imgur.com/Vpco7.png

感謝大家的幫助和展示我,我沒瘋,只是盲目的;)

我要去看看導入腳本忽略默認爲空場。永遠不要相信你自己寫的系統^^