2009-08-10 113 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";