2010-08-24 125 views
2

我具有包含表數據和所述字段中的一個是「類」MySQL,Max似乎不工作?

當我做:

select* from cvs where `Player ID` = <a_number> 

我得到含類號從1至10

如果我然後執行數據

select max(`Class`) from cvs where `Player ID` = <a_number> 

它返回9而不是10?

我刪除了第10類數據,它仍然返回9,我刪除了第9類的數據,並將其返回8個

類是一個varchar(50)

發生了什麼???

回答

2

如果你的類字段僅與整數填充,嘗試:

select max(cast(Class as UNSIGNED)) 
from cvs 
where `Player ID` = <a_number> 

MySQL正在做一個字母排序,而不是數字,因爲它是一個varchar。當它比較第一個字符時,'9'大於'1',以便在'10'後排序。理想情況下,如果數據是數字型的,那麼它應該使用適當的數字類型而不是varchar存儲。這也可以避免問題,因爲在Class列中插入單個非整數值,現在可以正常工作的查詢現在停止工作。

+0

你的鑽石!謝謝! – Tom 2010-08-24 14:50:08

0

它不是一個整數,所以它的alphabetizing他們。和9> 1。

之一:

cast(variable as int) 

convert(int, variable)