-2

我有下表的条目

+--------------------------------------------+----------+
| 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::... 没有正确排序。

4

1 回答 1

4

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

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

在此处查看小提琴。

于 2013-04-10T13:51:22.810 回答