2011-06-21 30 views
1

我剛剛遇到了一個我以前從未遇到的問題。當我在phpmyadmin中嘗試我的SQL語句時,一切正常。但是,一旦我在MySQL的c應用程序中使用它,它只能在其他每一次啓動時起作用。同樣,當我運行一次,它會阻塞整個表格,然後表格不會返回任何結果,即使在phpmyadmin中也是如此。SQL IF和LEFT JOIN導致數據庫出現故障

的SQL如下:一切都在WHERE,LEFT JOIN填滿了NULL一切過濾掉

SELECT watchedItems.aid, IF((watchedItems.maxBidPrice > 0.00), watchedItems.maxBidPrice, bidGroups.bidGroupPrice) 
AS maxBidPrice 
FROM watchedItems 
LEFT JOIN bidGroups ON bidGroups.bidGroupID = watchedItems.bidGroupID 
WHERE watchedItems.sniping = 1 
AND watchedItems.deleted = 0 
AND watchedItems.PID = 0 
AND watchedItems.processRunning = 0 
AND watchedItems.id = 1 

之前,可這在某種程度上影響表(NULL指針)?或者IF聲明放錯了位置?或者可能是左連接有問題?奇怪的是,如果我適應代碼,並只使用:

SELECT watchedItems.aid, IF((watchedItems.maxBidPrice > 0.00), watchedItems.maxBidPrice, bidGroups.bidGroupPrice) 
AS maxBidPrice 
FROM watchedItems 
LEFT JOIN bidGroups ON bidGroups.bidGroupID = watchedItems.bidGroupID 
WHERE 
watchedItems.id = 1 

一切似乎在表面上至少工作 - 我不明白表堵塞。也許我仍然在這裏失去一些東西。

+0

我要說它有話使用你的C代碼。那麼你可以發佈你用來從查詢中提取的代碼嗎? – judda

+0

我想你可能是對的。我現在嘗試了幾個解決方案,似乎沒有任何工作。 –

+0

你認爲我應該在一個新的線程中單獨發佈它嗎? –

回答

0

試試這個

SELECT watchedItems.aid, IF((bigGroups.bigGroupID IS NOT NULL AND watchedItems.maxBidPrice > 0.00), watchedItems.maxBidPrice, bidGroups.bidGroupPrice) 

的> 0.00不保證有來自bigGroups數據。

0

確保where子句和maxBidPrice中的所有列都有索引,否則請求將會非常昂貴。 (除了列以外,在phpMyAdmin表結構視圖中還有一個按鈕。)

它在phpMyAdmin中起作用,因爲它默默地將limit 50添加到sql代碼中。

如果maxBidPrice可以爲空,你可以使用COALESCE

IF((COALESCE(watchedItems.maxBidPrice, 0.00) > 0.00), 
    watchedItems.maxBidPrice, bidGroups.bidGroupPrice) 

如果maxBidPrice總是> 0,如果不爲NULL,使用IFNULL

IFNULL(watchedItems.maxBidPrice, bidGroups.bidGroupPrice) 
+0

謝謝kay,我已禁用maxBidPrice爲NULL。默認值是0.00 –