【问题标题】:How can I correctly sort items from a database in "natural" order如何以“自然”顺序正确排序数据库中的项目
【发布时间】:2019-10-06 18:23:18
【问题描述】:

我正在尝试按标题对数据库中的项目进行排序。项目是iphone 5iphone 6/6Siphone 11,..

当我使用代码对项目进行排序时

SELECT *
FROM ".FPD_PRODUCTS_TABLE."
ORDER BY `title` ASC

我得到了结果

iPhone 11
iPhone 5
Iphone 6/6S
...

我也试过按字符长度排序,但我又得到了错误的顺序。

我怎样才能得到正确的ASC 订单:

iphone 5
iphone 6/6S
iphone 11
...

【问题讨论】:

  • 在 SQL 中实现良好的自然排序总是很棘手。另请参阅 Why should I provide a Minimal Reproducible Example for a very simple SQL query?
  • .. 还可以考虑在 PHP 中进行排序,而不是有一个自然的排序功能。 -> natsort()
  • 另一种方法是添加另一列来指定排序顺序。
  • 感谢您的意见。我现在正在查看此选项以添加新列进行排序。
  • 其实目前并没有排序错误。这些是字符串,它正在对它们进行排序。例如,当将 11 和 5 排序为字符串时,它涉及到第一个字符,其中 1

标签: php mysql sql natural-sort


【解决方案1】:

在 PHP 中排序:

<?php
$rows = [
    ['model' => 'Samsung Galaxy'],
    ['model' => 'IPhone 11'],
    ['model' => 'iPhone 5'],
    ['model' => 'iphone 6/6S']
];

$key_models = array_column($rows, 'model');
natcasesort($key_models);

foreach($key_models as $k => $v)
    echo $rows[$k]['model'], "\n";

输出:

iPhone 5
iphone 6/6S
IPhone 11
Samsung Galaxy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-25
    • 2019-11-10
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多