我有一个包含名为views的列的表。每次用户刷新页面时,它都会更新视图计数+1 我想尝试做的是创建一个mysql查询,根据他们的视图计数输出行列表,从最高到最低。
这是我认为可行的
SELECT * FROM picdb ORDER BY views DESC LIMIT 10
即使我将其视为ASCENDING,它也完全没有了。
想法?
修改 列类型为TEXT
已解决将列类型更改为INT,现在工作正常。谢谢你指出来。
答案 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";