Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按数字排序\u列描述:为什么较小的数字出现在较大的数字之前?_Php_Mysql - Fatal编程技术网

Php 按数字排序\u列描述:为什么较小的数字出现在较大的数字之前?

Php 按数字排序\u列描述:为什么较小的数字出现在较大的数字之前?,php,mysql,Php,Mysql,我有一个小片段,它应该按照用户的帖子数量对列表进行排序 出于某种原因,一个有4篇文章的用户比一个有24篇文章的用户来得早。是因为它只根据第一个数字来做吗?我该如何解决这个问题 posts是一个包含数字的varchar列 我在数据库中有7个用户进行测试,一个有24个帖子,一个有21个帖子,一个有4个帖子,四个有0个帖子。它将其排序为4>24>21>0>0。如果您的字段是文本类型,请尝试此选项 或 您的posts字段似乎是一个字符串 所以,尝试这样做,将其排序为一个整数 SELECT * FROM

我有一个小片段,它应该按照用户的帖子数量对列表进行排序

出于某种原因,一个有4篇文章的用户比一个有24篇文章的用户来得早。是因为它只根据第一个数字来做吗?我该如何解决这个问题

posts是一个包含数字的varchar列


我在数据库中有7个用户进行测试,一个有24个帖子,一个有21个帖子,一个有4个帖子,四个有0个帖子。它将其排序为4>24>21>0>0。

如果您的字段是文本类型,请尝试此选项

您的posts字段似乎是一个字符串

所以,尝试这样做,将其排序为一个整数

SELECT * FROM `member` ORDER BY LENGTH(`posts`) DESC LIMIT 5 // it count multi-byte characters
这样就可以正确订购了


当然,正如@Jens所指出的,您可能会聪明地修改列定义。

posts是nummeric吗?如果是,将其强制转换为整数CASTposts AS Integer

posts是否为nummeric?向我们展示ddl和示例数据!帖子是整数吗?嘿,詹斯,谢谢。我犯了一个愚蠢的错误,将其作为数据库中的文本,刚刚修复。“我一直在检查代码,但弄不懂它。@Jens,你能回答这个问题吗?”?我会接受的。以防万一其他noob也有同样的问题,谷歌也会解决。谢谢。就我而言,这只是一个愚蠢的错误,错误不在代码中,而是在数据库中。@TedMobsby我已经添加了我的注释作为答案。请随意投票或接受它。
SELECT * FROM `member` ORDER BY LENGTH(`posts`) DESC LIMIT 5 // it gives the length in bytes
SELECT * FROM `member` ORDER BY LENGTH(`posts`) DESC LIMIT 5 // it count multi-byte characters
 ORDER BY CAST(posts AS INTEGER) DESC