mysql排序不正确

mysql排序不正确,mysql,sql-order-by,Mysql,Sql Order By,我有下表的条目 +--------------------------------------------+----------+ | menu_entry | position | +--------------------------------------------+----------+ | ADMINISTRATION::USERMANAGEMENT::USER | 2 | | DEMO::CH

我有下表的条目

+--------------------------------------------+----------+
| 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 |
+--------------------------------------------+----------+
我想按
菜单项
第一位和第二位进行订购。我用下面的陈述来说明这一点

 select menu_entry,position from app_names order by menu_entry, position;
但它只按菜单项排序,不按位置排序。 以下是我的声明:

+--------------------------------------------+----------+
| 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::。。。未正确排序。

您可能应该按提取第一个
::
左侧字符串部分的
子字符串索引(菜单项“:”,1)
排序,或者按
子字符串索引(菜单项“:”,2)
排序,具体取决于您在执行以下操作:

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

请参阅fiddle。

为什么要存储分隔值?该查询似乎按预期工作。排序正确<代码>L位于
R
之前。所以,
LOCKINGDEMO
ROWEDIT
之前,实际上它完成了它的工作,按菜单项排序。。。如果有两个菜单项相等,那么它将按位置排序查询是否正常工作?只有当列表中没有两个或多个相同的菜单项时,才会考虑该位置