2011-07-23 162 views
7

我在我的數據庫非常簡單的評級系統,其中每個等級存儲爲一個枚舉(「1」,「 - 1」)。計算總我試着用這樣的說法:問題:Mysql的轉換枚舉爲Int

SELECT SUM(CONVERT(rating, SIGNED)) as value from table WHERE _id = 1 

也能正常工作的正面1,但由於某些原因,-1被解析出來2的。

任何人都可以幫助或提供煽動?

或者我應該放棄,只是更改列的符號int(1)?

回答

3

是的,我建議更改列的類型。當您閱讀doc about enum type(強烈建議不要使用數字作爲枚舉值!)時,問題就變得很清楚 - - 枚舉項的索引被返回,而不是枚舉值本身。

+0

那麼,它會更加的描述來改變枚舉值'上'和'下'! –

+1

也許,但是如果他需要做很多這種「評級算術」,它很快就會變得單調乏味(而且速度很慢)......使用「普通整數值」進行操作要簡單得多。 – ain

+0

是的,我發佈了這個問題後繼續改變它。謝謝你的解釋。非常有幫助 – NSjonas

0

使用

SELECT SUM(IF(columnname >0, CAST(columnname AS CHAR) , NULL)) AS vals 
FROM `tableName` 
+1

嗨!這有什麼幫助?隨意解釋更多,並使用[代碼格式](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)。 –

0

玉傢伙,

只是有一點單純的時間與這一個。我瞭解到,我不應該在整數是值時使用ENUM。然而,我們有數年的數據,我無法改變數據庫。

這個壞小子的工作(把它變成一個字符,然後進入一個符號整型)。

CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1 
13

這是你想要

select enum+0 as enum 
9

這是什麼轉換爲int在MySQL的enum只可能:

CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1 
+0

這應該是公認的解決方案 –