Getting the right order - Mailing list pgsql-novice

From Martin Foster
Subject Getting the right order
Date
Msg-id 43531C3D.8010907@ethereal-realms.org
Whole thread Raw
List pgsql-novice
There are times when I feel like I'm experiencing a relapse in query
building and design.    Essentially, what I have is a fairly simple
table designed to keep track of layers, their parents, children and what
level of depth they have.   The example is below:

CREATE TABLE PGSCHEMA.Layer (
   LayerID              INT           NOT NULL DEFAULT
NEXTVAL('PGSCHEMA.seqLayer'),
   GalleryID            INT           NOT NULL,
   LayerShort           VARCHAR(16),
   LayerFull            VARCHAR(100),
   LayerDescription     VARCHAR(250),
   LayerHighlight       VARCHAR(30),
   LayerThumbnail       VARCHAR(200),
   LayerLevel           SMALLINT      NOT NULL DEFAULT '0',
   LevelZero            INT           NOT NULL DEFAULT '0',
   LevelOne             INT           NOT NULL DEFAULT '0',
   LevelTwo             INT           NOT NULL DEFAULT '0',
   LevelThree           INT           NOT NULL DEFAULT '0',
   LevelFour            INT           NOT NULL DEFAULT '0',
   LevelFive            INT           NOT NULL DEFAULT '0',
   CONSTRAINT pkLayer                 PRIMARY KEY (LayerID, GalleryID),
   CONSTRAINT fkLayer                 FOREIGN KEY (GalleryID)
     REFERENCES PGSCHEMA.Gallery (GalleryID)
       ON DELETE CASCADE
       ON UPDATE CASCADE
) WITHOUT OIDS;

By ordering on the last seven rows of information, I can instantly
organize everything by parentage, level and depth.   The only problem I
have on this matter is that it's not exactly what I am looking for.

Sample data follows:

  layerid | galleryid | layershort  | layerlevel | levelzero | levelone
| leveltwo | levelthree | levelfour | levelf
ive
--------------------------------------------------------------
56 | 271 | Wolfe            | 1 | 46 | 56 | 56 | 56 | 56 | 56
66 | 271 | Vimy             | 3 | 46 | 63 | 65 | 66 | 66 | 66
67 | 271 | McNaughton       | 3 | 46 | 63 | 65 | 67 | 67 | 67
68 | 271 | Barrifield       | 3 | 46 | 63 | 65 | 68 | 68 | 68
65 | 271 | Base             | 2 | 46 | 63 | 65 | 65 | 65 | 65
79 | 271 | Downtown         | 2 | 46 | 63 | 79 | 79 | 79 | 79
80 | 271 | End_of_Day       | 2 | 46 | 63 | 80 | 80 | 80 | 80
70 | 271 | Bellevue         | 3 | 46 | 63 | 69 | 70 | 70 | 70
71 | 271 | CE               | 3 | 46 | 63 | 69 | 71 | 71 | 71
72 | 271 | General_Hospital | 3 | 46 | 63 | 69 | 72 | 72 | 72
73 | 271 | Marine           | 3 | 46 | 63 | 69 | 73 | 73 | 73
74 | 271 | Murney           | 3 | 46 | 63 | 69 | 74 | 74 | 74
75 | 271 | Fort_Henry       | 3 | 46 | 63 | 69 | 75 | 75 | 75
51 | 271 | Boldt_castle     | 2 | 46 | 50 | 51 | 51 | 51 | 51
48 | 271 | Belle_Dairy      | 2 | 46 | 47 | 48 | 48 | 48 | 48
60 | 271 | Sharbot          | 1 | 46 | 60 | 60 | 60 | 60 | 60
87 | 271 | RMC              | 3 | 46 | 63 | 65 | 87 | 87 | 87
76 | 271 | Prison           | 3 | 46 | 63 | 69 | 76 | 76 | 76
78 | 271 | Pump_House       | 3 | 46 | 63 | 69 | 78 | 78 | 78
63 | 271 | Kingston         | 1 | 46 | 63 | 63 | 63 | 63 | 63
82 | 271 | Ghosts_Fort      | 2 | 46 | 63 | 82 | 82 | 82 | 82
83 | 271 | HMCS_Toronto     | 2 | 46 | 63 | 83 | 83 | 83 | 83
81 | 271 | Fall_View        | 2 | 46 | 63 | 81 | 81 | 81 | 81
50 | 271 | Gananoque        | 1 | 46 | 50 | 50 | 50 | 50 | 50
47 | 271 | Belleville       | 1 | 46 | 47 | 47 | 47 | 47 | 47
61 | 271 | East_kg          | 1 | 46 | 61 | 61 | 61 | 61 | 61
53 | 271 | Napanee          | 1 | 46 | 53 | 53 | 53 | 53 | 53
59 | 271 | Presquile        | 1 | 46 | 59 | 59 | 59 | 59 | 59
62 | 271 | West_kg          | 1 | 46 | 62 | 62 | 62 | 62 | 62
57 | 271 | Upper_Canada     | 1 | 46 | 57 | 57 | 57 | 57 | 57
58 | 271 | Trenton          | 1 | 46 | 58 | 58 | 58 | 58 | 58
77 | 271 | PWOR             | 3 | 46 | 63 | 69 | 77 | 77 | 77
69 | 271 | Museums          | 2 | 46 | 63 | 69 | 69 | 69 | 69
84 | 271 | Mills_Locks      | 2 | 46 | 63 | 84 | 84 | 84 | 84
85 | 271 | Misc             | 2 | 46 | 63 | 85 | 85 | 85 | 85
86 | 271 | Ontario_West     | 2 | 46 | 63 | 86 | 86 | 86 | 86
88 | 271 | Thousand_Islands | 2 | 46 | 63 | 88 | 88 | 88 | 88
89 | 271 | Water_Treatment  | 2 | 46 | 63 | 89 | 89 | 89 | 89
46 | 271 | Ontario          | 0 | 46 | 46 | 46 | 46 | 46 | 46
64 | 271 | Prince_Edward    | 1 | 46 | 64 | 64 | 64 | 64 | 64
49 | 271 | Belle_Glanmore   | 2 | 46 | 47 | 49 | 49 | 49 | 49
54 | 271 | Hell_Holes       | 2 | 46 | 53 | 54 | 54 | 54 | 54

As you can see the way children are identified from parents is that a
child will carry the information of the parent up to its level.  From
that point on the child's identifier is placed along the lines.

This will grant me the ability to use one query to instantly stack
everything in the proper order without any real modifications or
handling.    This also means that the primary keys do not have to change
when a child is added into the mix for example.

However the order comes up as this when sorted:

◦ Ontario
  ◦ Belleville
   ◦ Belle_Dairy
   ◦ Belle_Glanmore
  ◦ Gananoque
   ◦ Boldt_castle
  ◦ Napanee
   ◦ Hell_Holes
  ◦ Wolfe
  ◦ Upper_Canada
  ◦ Trenton
  ◦ Presquile
  ◦ Sharbot
  ◦ East_kg
  ◦ West_kg
  ◦ Kingston
   ◦ Base
    ◦ Vimy
    ◦ McNaughton
    ◦ Barrifield
    ◦ RMC
   ◦ Museums
    ◦ Bellevue
    ◦ CE
    ◦ General_Hospital
    ◦ Marine
    ◦ Murney
    ◦ Fort_Henry
    ◦ Prison
    ◦ PWOR
    ◦ Pump_House
   ◦ Downtown
   ◦ End_of_Day
   ◦ Fall_View
   ◦ Ghosts_Fort
   ◦ HMCS_Toronto
   ◦ Mills_Locks
   ◦ Misc
   ◦ Ontario_West
   ◦ Thousand_Islands
   ◦ Water_Treatment
  ◦ Prince_Edward

Which is correct except that it would be better if items at the root and
within the same branch were in alphabetical order.    Anyone have ideas?

    Martin Foster
    Creator/Designer Ethereal Realms
    martin@ethereal-realms.org


pgsql-novice by date:

Previous
From: Michael Glaesemann
Date:
Subject: Re: Switching from MySQL -- Missing DESCRIBE table, SHOW
Next
From: "krishnaa sridharan"
Date:
Subject: psql command line tool