MySQL - 通过连接到一个来排序2列

时间:2017-10-25 09:56:08

标签: mysql sql sorting

我有一个问题。

我正在开发一个SQL查询,它将一个表中的两列连接到一列,并按升序对该结果进行排序(按该列)。

因此,我们假设我们有一个包含自动入侵 ID 的表格。在同一个表中,我们有列 parentID (可以是0或者是现有ID)。

ID | parentID | column1 | column2 | number
-------------------------------------------
1  | 0        | data    | data   | 1
2  | 0        | data    | data   | 1
3  | 1        | data    | data   | 1
4  | 2        | data    | data   | 1
5  | 0        | data    | data   | 1
6  | 4        | data    | data   | 1
7  | 1        | data    | data   | 1

我希望获得结果,其中 ID parentID 将被连接在一起并进行排序。所以表格看起来像。 (如果 parentID 为0,则按 ID 排序)

ID | parentID | JOINEDCOLUMN | column1 | column2 | number
-------------------------------------------
1  | 0        | 1              | data    | data   | 1
3  | 1        | 1              | data    | data   | 1
7  | 1        | 1              | data    | data   | 1
2  | 0        | 2              | data    | data   | 1
4  | 2        | 2              | data    | data   | 1
6  | 4        | 4              | data    | data   | 1
5  | 0        | 5              | data    | data   | 1

(我不想要来自JOINED COLUMN的数据,但是排序表是结果 - > PHP ...)

我有一个查询 - 这没有按预期工作 - >如果父ID不是0,则返回两次。

SELECT 
   id as JOINEDCOLUMN, parentID, column1, column2, column3 
FROM table 
WHERE number = 1 
UNION 
SELECT 
   parentID, parentID, column1, column2, column3 
FROM table 
WHERE number = 1 AND parentID <> 0
ORDER BY `JOINEDCOLUMN` ASC

1 个答案:

答案 0 :(得分:1)

CASE

中使用ORDER BY
SELECT 
  * 
FROM
  demo  /* add your filter WHERE number = 1 */
ORDER BY 
  CASE
    WHEN parentID = 0 
    THEN ID 
    ELSE parentID 
  END 

DemoSelect