sql >> Database >  >> RDS >> Mysql

MySQL-volgorde op velden en ouders

U kunt beter parent_id bewaren maar niet de naam van de ouder.

Hier is een snelle oplossing om uw tafel te bestellen 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

BEWERK 1 Variant #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

BEWERK 2 om te zien hoe deze volgorde werkt, kun je dit veld toevoegen om een ​​onderdeel te selecteren zoals:

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. Hoe kan men, indien mogelijk, PostgreSQL insluiten?

  2. PostgreSQL-fout:het programma kan niet starten omdat libpq.dll op uw computer ontbreekt

  3. SQL Server ELKE Operator uitgelegd

  4. Hoe een ingevoegde waarde voor trigger te krijgen