2015-02-10 120 views
0

嗨我試圖查詢當前餘額,但它似乎顯示在最後的正確的平衡,但整體不正確。所以基本上計算是MySQL返回錯誤的值

IF狀態等於 '錯誤'

餘額=餘額 - 100

ELSE

餘額=餘額+(賠率* 100)

END

下面你看到我的當前查詢輸出:

Odds Status  Date     balance 
1.70 | wrong | 2015-02-08 13:22:17 | 205 
3.05 | correct | 2015-02-08 20:27:44 | 305 
2.20 | correct | 2015-02-09 15:45:27 | 425 

從我的計算餘額應爲

-100 
205 
425 

那麼爲什麼不顯示呢?

SET @balance = 0; 
SELECT odds.meta_value AS odds, stat.meta_value AS stats, posts.post_date as postdate, 
     CASE WHEN stat.meta_value = 'wrong' 
     THEN @balance := @balance -100 
     ELSE @balance := @balance + (odds.meta_value * 100) 
     END as balance 
     FROM wp_t3a673_posts posts 
     LEFT JOIN wp_t3a673_postmeta stat ON posts.ID = stat.post_id 
     AND stat.meta_key = 'status' 
     LEFT JOIN wp_t3a673_postmeta odds ON posts.ID = odds.post_id 
     AND odds.meta_key = 'odds' 
     LEFT JOIN wp_t3a673_term_relationships tr ON posts.ID = tr.object_id 
     LEFT JOIN wp_t3a673_term_taxonomy t ON tr.term_taxonomy_id = t.term_taxonomy_id 
     WHERE (
     stat.meta_value = 'correct' 
     OR stat.meta_value = 'wrong' 
     ) 
     AND posts.post_status = 'publish' 
     AND t.taxonomy = 'category' 
     AND (
     t.term_id =4 
     OR t.term_id =5 
     OR t.term_id =6 
     ) 
ORDER BY posts.id 

回答

0

我沒有在你的代碼的密切關注,但在你做(從MySQL文檔)的方式使用變量之前考慮這個問題:

一般情況下,比其他SET語句,你不應該爲一個用戶變量賦值並且在同一個語句中讀取這個值。例如,要增加一個變量,這是可以的:

SET @a = @a + 1;

對於其他語句,如SELECT,您可能會得到您期望的結果,但這不能保證。在下面的語句中,你可能會認爲MySQL首先評估@a,然後再執行一個任務:

SELECT @a,@a:= @ a + 1,...;

但是,涉及用戶變量的表達式的評估順序未定義。

你可以找到更多在這裏:http://dev.mysql.com/doc/refman/5.7/en/optimizing-myisam-bulk-data-loading.html

+0

但這樣做修復它計算錯誤的錯誤?我不確定你想讓我改變什麼? – 2015-02-10 19:13:55

+0

看起來更接近,看起來你使用變量求和的方式是「好」的方法。然而,這些聯合會爲重複值留下足夠的空間,但如果沒有數據集,很難說清楚。我會做一個查詢來列出所有數據,看看是否有多次添加任何內容。 – 2015-02-10 19:32:55

+0

我在其他地方使用的差不多相同的查詢,它計數正確,它只是奇怪,它提供了正確的結果在結束425,但沒有在開始時顯示-100 – 2015-02-10 19:36:39