拥有像id
,parent_id
,order_nr
现在选择这样的一切
SELECT * FROM `table1` WHERE 1 ORDER BY `id` DESC
获得结果
`id`, `parent_id`, `order_nr`
"27", "23", "3"
"26", "23", "2"
"25", "23", "1"
"24", "0", "0"
"23", "0", "0"
"22", "0", "0"
需要按照这样的顺序得到相同的结果:
`id`, `parent_id`, `order_nr`
"24", "0", "0"
"23", "0", "0"
"25", "23", "3"
"26", "23", "2"
"27", "23", "1"
"22", "0", "0"
答案 0 :(得分:2)
这个怎么样:
SELECT * FROM `table1` WHERE 1 ORDER BY order_nr,parent_id,id DESC
您可以尝试先交换哪个列。
答案 1 :(得分:0)
假设parent_id
和order_nr
是varchar列,但您想将它们排序为数字,那么您可以在订购时转换列:
SELECT *
FROM table1
ORDER BY CAST(parent_id AS SIGNED), -- no need for CAST if already numeric
CAST(order_nr AS SIGNED)
注意:您的第一个所需输出似乎没有任何明显的逻辑,所以我为第二个提供了解决方案。
答案 2 :(得分:0)
SELECT * FROM `table1` WHERE 1 ORDER BY `parent_id`, `order_nr` ASC
输出就像:
`id`, `parent_id`, `order_nr`
"24", "0", "0"
"23", "0", "0"
"22", "0", "0"
"25", "22", "1"
"26", "22", "2"
"27", "22", "3"
答案 3 :(得分:0)
假设id的两位数字(但可以扩展到任意位数)
SELECT IF(parent_id=0,id,parent_id)*100+IF(parent_id=0,0,id)),* FROM table ORDER BY 1 DESC
或者如果ids是字符串
SELECT CONCAT(IF(parent_id='0',LPAD(id,2,'0'),LPAD(parent_id,2,'0')),IF(parent_id='0','00',LPAD(id,2,'0'))),* FROM table ORDER BY 1 DESC
这将为您提供第一列
2400 2300 2227 2226 2225 2200
答案 4 :(得分:0)
当parent_id
为0时,只需使用id
,否则请使用parent_id
;按order_nr
排序然后打破关系。所有排序都是降序排列:
SELECT id, parent_id, order_nr,
id AS sort_order
FROM table1
WHERE parent_id = '0'
UNION
SELECT id, parent_id, order_nr,
parent_id AS sort_order
FROM table1
WHERE parent_id <> '0'
ORDER
BY sort_order DESC, order_nr DESC;