php - 对我的号码下订单 natsort();效果不好

标签 php mysql sql-order-by

我在从数据库加载内容时遇到问题。 在我的数据库中,我有一个表,其中保存我的画廊图像。 在我的行中,标题被设置为文本,因为我想要使用的值是:主题标签,然后是像这样的数字 #1 #2 ... 等等。

所以我正在像这样加载我的内容......

$sql = "SELECT * FROM gallery ORDER BY title DESC LIMIT $start_from, $per_page";
$run = mysqli_query($conn,$sql);

        while ($rows = mysqli_fetch_assoc($run))
        {  

            echo'....... ';}

但问题是,当我按标题订购时,我得到这些数字

标签90

标签 9-2

标签 9-1

所以我正在使用 ORDER BY title DESC 为什么我最大的数字(标签 706)不是第一个?

here is an picture of it...

我尝试使用 natsort(); 但它不起作用,因为它保留了相同的内容。

here is one more pic of my problem but in an other page ...

我该如何解决这个问题?

最佳答案

9-2 不是数字。它是一个 STRING,因此这意味着您的 title 字段是文本类型(char、varchar),并且适用 STRING 排序规则。这意味着字符串是“逐个字符”进行比较,而不是“逐个数字”。

9-2
7
abc

comparison a) "9" > "7" -> true
comparison b) "-" > "" -> true
comparison c) "2" > "" -> true

同样:

9-2
706
abc

comparison a) "9" > "7" -> true   (ascii 57 > ascii 55)
comparison b) "-" > "0" -> false  (ascii 45 > ascii 48)
comparison c) not necessary, 9-2 is already "bigger" than 706

因此,9-2 是一个比 706 更大的字符串,因为 9>7 始终为真。

关于php - 对我的号码下订单 natsort();效果不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39274323/

相关文章:

php - 正确的对象实例化/持久化排序和注释

mysql - 每个唯一列值获取一条记录

sql - PostGIS 按 ST_Distance 排序 - 不按距离排序记录

c# - 使用 LINQ 按多个表中的多个属性有条件地对元素进行排序

php - 如何检查 var 是否存在于数据库列中,如果不存在则不执行任何操作

javascript - 使用 PHP-Hubspot API 上传 Hubspot 文件

php - 从两个互斥表中进行 SELECT 以合并结果集

php - 如何将数据库/PHP 中的 PDF 文件嵌入 HTML

php - 将请求注入(inject) Symfony2 实体

php - 将 JSON 数据插入 MySQL 表