【问题标题】:mysql does not sort properlymysql没有正确排序
【发布时间】:2013-04-10 13:46:08
【问题描述】:

我有下表的条目

+--------------------------------------------+----------+
| menu_entry                                 | position |
+--------------------------------------------+----------+
| ADMINISTRATION::USERMANAGEMENT::USER       |        2 |
| DEMO::CHART::EXAMPLE                       |        1 |
| PROJMGMT::PROJSTRG::LOP                    |        2 |
| ADMINISTRATION::USERMANAGEMENT::RIGHTSMMGT |        1 |
| PROJMGMT::PROJSTRG::MEETINGS               |        1 |
| DEMO::GRID::CELLEDIT                       |        1 |
| DEMO::GRID::ROWEDIT                        |        3 |
| DEMO::DATAMGMT::GROUPING                   |        1 |
| DEVELOPER::APPS::ADDAPP                    |        2 |
| DEVELOPER::APPS::APPTEST                   |        1 |
| DEMO::GRID::LOCKINGDEMO                    |        4 |
| DEMO::GRID::FILTERDEMO                     |        2 |
+--------------------------------------------+----------+

我想按位置按menu_entry 排序。我用以下语句做到这一点

 select menu_entry,position from app_names order by menu_entry, position;

但它只按 menu_entry 而不是按位置排序。 这是我的声明的回报:

+--------------------------------------------+----------+
| menu_entry                                 | position |
+--------------------------------------------+----------+
| ADMINISTRATION::USERMANAGEMENT::RIGHTSMMGT |        1 |
| ADMINISTRATION::USERMANAGEMENT::USER       |        2 |
| DEMO::CHART::EXAMPLE                       |        1 |
| DEMO::DATAMGMT::GROUPING                   |        1 |
| DEMO::GRID::CELLEDIT                       |        1 |
| DEMO::GRID::FILTERDEMO                     |        2 |
| DEMO::GRID::LOCKINGDEMO                    |        4 |
| DEMO::GRID::ROWEDIT                        |        3 |
| DEVELOPER::APPS::ADDAPP                    |        2 |
| DEVELOPER::APPS::APPTEST                   |        1 |
| PROJMGMT::PROJSTRG::LOP                    |        2 |
| PROJMGMT::PROJSTRG::MEETINGS               |        1 |
+--------------------------------------------+----------+

如您所见,DEMO::GRID::... 没有正确排序。

【问题讨论】:

  • 为什么要存储分隔值?
  • 该查询似乎按预期工作。
  • 排序正确。 LR 之前。所以LOCKINGDEMOROWEDIT之前
  • 事实上它完成了它的工作,按 menu_entry 排序......如果你有 2 个 menu_entry 相等,那么它将按位置排序
  • 查询似乎正常工作?仅当有两个或多个相同的菜单条目(不在您的列表中)时才考虑该位置

标签: mysql sql-order-by


【解决方案1】:

您可能应该按SUBSTRING_INDEX(menu_entry, '::', 1) 排序,它提取第一个:: 左侧的字符串部分,或者按SUBSTRING_INDEX(menu_entry, '::', 2) 排序,具体取决于您所追求的:

select menu_entry, position
from app_names
order by
  SUBSTRING_INDEX(menu_entry, '::', 1), position;

请看小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 2014-09-07
    • 2014-11-21
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多