我有一个根据 id(101、102、201、301 等)构建的表格,第一个数字是导航列,并且具有放置值(1、2、3 及以上)了解导航中的项目的去向。
事后看来,该表的结构如下:
id title placement
101 abc 3
102 def 1
103 ghi 2
201 jkl 2
202 mno 3
203 pqr 1
301 stu 2
302 vwx 1
我希望表格的结构如下:
id title placement
102 def 1
103 ghi 2
101 abc 3
203 pqr 1
201 jkl 2
202 mno 3
302 vwx 1
301 stu 2
注意位置是如何先升序,然后是 id。
我一开始以为这只是一个简单的按 id 和布局排序的订单;但事实并非如此。
我尝试过 Group By 和 Order By 的组合,然后是 Union 和 Field 设置值,但据我所知,没有一个有效。
以下是我遇到的一些查询,但没有得到我想要的结果:
SELECT t.* FROM (SELECT * FROM table_name ORDER BY placement) t GROUP BY t.id
和
(SELECT * FROM table_name ORDER BY placement)
UNION
(SELECT * FROM table_name ORDER BY id);
我也进行了联接,但我不记得查询了。
感谢您的任何额外帮助。
最佳答案
听起来您想先按 id 的第一位数字排序,然后再按位置排序:
SELECT *, (id DIV 100) AS id_first_digit FROM t ORDER BY id_first_digit, placement;
您可能需要根据您的 ID 格式(例如,如果它可以是四位数字)修改 id_first_digit
的表达式。
关于MySQL 按多列排序(id 和整数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26539909/