sql >> Databáze >  >> RDS >> Mysql

Pořadí MySQL podle polí a rodičů

Měli byste si raději ponechat parent_id ale ne jméno rodiče.

Zde je rychlé řešení pro objednání vašeho stolu http://sqlfiddle.com/#!9/2a1fb /3

SELECT *
FROM table1
ORDER BY 
   CASE WHEN parent_id IS NULL THEN CAST(ID AS CHAR)
   ELSE CONCAT(CAST(parent_id AS CHAR),'-', CAST(ID AS CHAR)) END

UPRAVIT 1 Varianta #2 :-) http://sqlfiddle.com/#!9/76dcb/23

SELECT t1.* 
FROM table1 t1
LEFT JOIN table1 t2
ON t2.ID = t1.parent_id
ORDER BY 
   CASE WHEN t2.ord_idx IS NULL THEN CAST(t1.ord_idx AS CHAR)
   ELSE CONCAT(CAST(t2.ord_idx AS CHAR),'-',CAST(t1.ord_idx AS CHAR)) END

ÚPRAVA 2 Chcete-li vidět, jak tato objednávka funguje, stačí přidat toto pole a vybrat část jako:

SELECT t1.*, CASE WHEN t2.ord_idx IS NULL THEN CAST(t1.ord_idx AS CHAR)
   ELSE CONCAT(CAST(t2.ord_idx AS CHAR),'-',CAST(t1.ord_idx AS CHAR)) END as my_order 
FROM table1 t1
LEFT JOIN table1 t2
ON t2.ID = t1.parent_id
ORDER BY 
   CASE WHEN t2.ord_idx IS NULL THEN CAST(t1.ord_idx AS CHAR)
   ELSE CONCAT(CAST(t2.ord_idx AS CHAR),'-',CAST(t1.ord_idx AS CHAR)) END


  1. Jak vám může analýza pracovní zátěže SQL pomoci?

  2. Syntaxe vnějšího spojení Oracle ve starém stylu – Proč umístit (+) na pravou stranu znaménka rovná se v levém vnějším spojení?

  3. CRS 11.2.0

  4. Celkem nahoru Mezisoučet v zobrazení mřížky