对单词中匹配的起始字母进行排序

Sort order on matching starting letters in words

我有一个 table,我正在尝试在 name

上使用“apple m”过滤值
select * from table where name like '%apple%m%'
+-------+-------------------------------+------------------------+
|  id   |             name              |          cat           |
+-------+-------------------------------+------------------------+
|  2757 | Apple MacBook                 | Laptops & Accessories  |
|  2777 | Apple Bottom Tops             | Western Wear           |
|  2752 | Apple Monitors                | Desktop Components     |
|  2756 | Apple Desktop & Monitors      | Desktops & Accessories |
|  2778 | Apple Bottom Tunics           | Tops                   |
|  2776 | Apple Selector & Smart Box    | Video & TV Accessories |
|  2787 | Apple Pie Pyjamas             | Girl Clothes           |
|  2773 | Apple Selector & Smart Box    | TV & Video Accessories |
|  2780 | Apple Fun Card Games          | Toys                   |
| 38304 | Snapple Mixer juicer grinders | Kitchen Appliances     |
+-------+-------------------------------+------------------------+

我想对以“apple”和“m”开头的显示值进行排序,如下所示:

+------+--------------------------+------------------------+
|  id  |           name           |          cat           |
+------+--------------------------+------------------------+
| 2757 | Apple MacBook            | Laptops & Accessories  |
| 2752 | Apple Monitors           | Desktop Components     |
| 2756 | Apple Desktop & Monitors | Desktops & Accessories |
|      | ---Rest all after this-- |                        |
+------+--------------------------+------------------------+

我认为您可以使用如下简单的方法:

SELECT * FROM your_table WHERE name LIKE 'apple% m%' ORDER BY name;

上述查询首先会获取名称以 'apple ' 开头的行,然后对结果进行排序。

如果您需要区分大小写,那么您可以使用:

SELECT * FROM your_table WHERE name LIKE 'Apple% m%' COLLATE utf8_bin ORDER BY name;

Case sensitivity in like

使用:

ORDER BY name LIKE 'Apple%m%' DESC, name ASC

name LIKE 'Apple%m%' 当名字匹配模式时是 1,当它不匹配时是 0,所以这将首先对匹配的名字进行排序。然后它将按每个组中的名称排序。