Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL按多列排序(id和整数)_Mysql - Fatal编程技术网

MySQL按多列排序(id和整数)

MySQL按多列排序(id和整数),mysql,Mysql,我有一个根据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(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
请注意,位置是如何首先是asc,然后是id

起初我以为这是一个简单的按id、位置排序的订单;但事实并非如此

我尝试了Group By和Order By的组合,然后是Union和字段集值,但据我所知,没有一种组合起作用

以下是我遇到的一些问题,但却没有得到我想要的:

SELECT t.* FROM (SELECT * FROM table_name ORDER BY placement) t GROUP BY t.id

我也做了一个连接,但我记不起查询了


谢谢您的帮助。

听起来您想先按id的第一位数字下单,然后按位置下单:

SELECT *, (id DIV 100) AS id_first_digit FROM t ORDER BY id_first_digit, placement;

您可能需要根据您的id格式修改
id\u first\u digit
的表达式(例如,如果它可以是四位数)。

您希望它如何排序?要先导航,再定位,再识别吗?只需使用SELECT*from table_名称顺序按navid、placement、id(顺便说一句,在您的数据中,只有navid、placement…)即可。navid是不相关的,因为id起作用,但在我的项目中,我必须按数字进行navid。无论如何,为了更清楚的目的,我会把它去掉。我想要的是按位置然后id排序,但对我来说效果不太好。它有顺序排列的位置值,但ID不是。希望我足够清楚。是的,它起作用了。ID是一个int(5)
SELECT *, (id DIV 100) AS id_first_digit FROM t ORDER BY id_first_digit, placement;