我试图将记录从大到小排序,这是我的示例记录:
id name view like
1 name1 5 1
2 name2 2 4
3 name3 41 3
4 name4 6 31
5 name5 1 2
例如,我希望订单记录如下(即由名为like
的字段排序):
id name view like
4 name4 6 31
2 name2 2 4
3 name3 41 3
5 name5 1 2
1 name1 5 1
我尝试了这个查询...
SELECT * FROM tablename ORDER BY like DESC
...但查询结果现在是这样的:
id name view like
2 name2 2 4
3 name3 41 3
4 name4 6 31
5 name5 1 2
1 name1 5 1
那么,我想要的正确查询是什么?
答案 0 :(得分:3)
like
是reserved
mysql
字词
你可以使用反引号逃脱它; ``
SELECT * FROM `tablename` ORDER BY `like` DESC
答案 1 :(得分:2)
如果您选择了错误的数据类型来存储整数数据,并且您可能已为此选择了varchar,则会发生这种情况。
您需要将字符串转换为数字以便订购
SELECT * FROM tablename ORDER BY `like`+0 DESC
答案 2 :(得分:2)
看起来您正在以字符串格式存储like
的数值; CHAR
或VARCHAR
。这将导致您可以看到按字母顺序排列的样式(将1设为A,将2设为B等,然后将结果排序为单词)。
将列的数据类型更改为INT
等数字格式,查询应按预期运行。
如果您无法更改列的数据类型,那么我建议将其投射到查询中:
SELECT * FROM tablename ORDER BY CAST(`like` AS UNSIGNED) DESC
或
SELECT * FROM tablename ORDER BY CAST(`like` AS SIGNED) DESC
如果like
可能是否定的。
我觉得这比+0
更容易阅读和控制,但Abhik打败了我:)
答案 3 :(得分:0)
您不能将保留字用作字段名称。将其更改为likes
然后您可以直接触发此查询...
SELECT * FROM tablename ORDER BY likes DESC
答案 4 :(得分:0)
like列的数据类型是什么我觉得它不是Integer如果不是那么请更改表格