mysql按从最高值到最低值的顺序显示行

时间:2009-08-10 21:00:24

标签: sql mysql

我有一个包含名为views的列的表。每次用户刷新页面时,它都会更新视图计数+1 我想尝试做的是创建一个mysql查询,根据他们的视图计数输出行列表,从最高到最低。

这是我认为可行的

SELECT * FROM picdb ORDER BY views DESC LIMIT 10

即使我将其视为ASCENDING,它也完全没有了。

想法?

修改 列类型为TEXT

已解决将列类型更改为INT,现在工作正常。谢谢你指出来。

5 个答案:

答案 0 :(得分:3)

如果列类型为TEXT,则默认排序行为将数据视为字符串,因此按字母顺序(而不是数字)对它们进行排序。

将列类型更改为数字类型,它将正确排序。

答案 1 :(得分:3)

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

可能会做到这一点。真正的问题是为什么你有一个包含文本类型的整数的列?

答案 2 :(得分:1)

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

答案 3 :(得分:1)

这看起来像是经典的字母数字排序问题。如果列类型是文本,那么您可能会看到类似1,10,15,20,3的顺序。换句话说,它按文本值而不是整数值排序。

您可以将列更改为数字类型,或者您可以执行以下操作:

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

但是,这将无法利用views列上的任何索引。最好将列更改为数字类型,如果它确实是它所代表的那样。

答案 4 :(得分: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";