2009-08-10 128 views
0

我有一個包含名爲views的列的表。用戶每次刷新頁面時,都會更新查看次數+1。
即時嘗試做什麼,是創建一個MySQL查詢來輸出行的列表根據他們的觀點計數,從最高到最低。mysql按從最高值到最低值的順序顯示行

這就是我想會的工作

SELECT * FROM picdb ORDER BY views DESC LIMIT 10 

甚至當我觀看漸強,其所有走出低谷。

想法?

編輯 列類型爲TEXT

解決改變列類型爲INT,現在工作得很好。感謝您指出。

+1

什麼意見欄的日期類型? – Nate 2009-08-10 21:01:54

+0

忘記提及...發佈更新 – mrpatg 2009-08-10 21:02:12

+2

爲什麼列類型文本?除此之外,還會有其他數字嗎?如果它是一個數字字段,它可能會正確地命令。 – 2009-08-10 21:04:15

回答

3

如果您的列類型爲TEXT,則默認排序行爲將數據視爲字符串,因此按字母順序排序(而非數字)。

將您的列類型更改爲數字類型,並且它將正確排序。

3
SELECT 
    * 
FROM 
    tbl 
ORDER BY 
    CAST(views AS UNSIGNED) DESC 
LIMIT 
    10 

可能會訣竅。真正的問題是爲什麼你有一個包含文本類型整數的列?

+0

非常感謝你,你救了我! – 2016-08-02 11:04:38

1
select a,b,CAST(views AS UNSIGNED) c from picdb order by c desc limit 10 
1

這看起來像經典的字母數字排序問題。如果列類型是文本,那麼您可能會看到類似於1,10,15,20,3的順序。換句話說,它按文本值而不是整數值進行排序。

你可以列更改爲數字類型,或者你可以這樣做:

SELECT * FROM picdb ORDER BY CONVERT(views, UNSIGNED INTEGER) DESC LIMIT 10 

然而,這無法在views列採取任何指數的優勢。如果這確實代表了它,那麼將列更改爲數字類型會更好。

0

如果你想顯示你的表格行從較高值到較低值然後使用此查詢。

query = "SELECT * FROM CurrencyTable ORDER BY CAST(currency_rate AS UNSIGNED) DESC"; 

如果你想從較低值的行顯示更高的價值然後使用該查詢

query-2 = "SELECT * FROM CurrencyTable ORDER BY CAST(currency_rate AS UNSIGNED) ASC";