Avatar billede fangel Nybegynder
21. august 2003 - 19:57 Der er 11 kommentarer og
1 løsning

speciel order

Hej

jeg har en tabel der indeholder hele mit site (eller, det kommer den til når jeg har løst dette problem)

der har jo to felter:

ID og RefID

jeg vil gerne have et SELECT * FROM tabel sorteret så de kommer ud sådan her

ID = 1
  evt RefID = 1
  evt flere RefID = 1
ID = 2
  evt RefID = 2
  evt flere RefID = 2

OSV...

hvordan gøres dette - normalt ville jeg prøve mig frem, men jeg har ikke lige overskud til det idag - vil gætte på fx noget leftjoin

Morten
Avatar billede arne_v Ekspert
21. august 2003 - 20:24 #1
Hvis nu der er data:

ID  RefID
1      3
2      NULL
3      1

Hvad vil du have ud af det ?

1  3
3  1
2  NULL
3  1
1  3

?

Sådan læser jeg dit spørgsmål, men det synes jeg jo ikke giver mening, så
jeg har uden tvivl misforstået dig.
Avatar billede fangel Nybegynder
21. august 2003 - 20:33 #2
den menu soom skal genereres er til denne siden:

http://mfa.ath.cx

så lad os sige vi har følgende

---------
| ID | RefID |
| 1  | NULL |
| 2  | NULL |
| 3  | 1    |
| 4  | 3    |
| 5  | 2    |
| 6  | 3    |
---------

skal de komme ud sådan her:

ID
1
3
  4
6
2
5

(indent'ed to make sense)

Morten
Avatar billede fangel Nybegynder
21. august 2003 - 20:33 #3
hov...

1
  3
    4
  6
2
  5

Morten
Avatar billede arne_v Ekspert
21. august 2003 - 20:38 #4
Altså vi skal "følge" RefID->ID ?

Det tror jeg ikke at man kan lave i SQL.
Avatar billede fangel Nybegynder
21. august 2003 - 22:16 #5
nææ - nok ikke når den skal være så 'nested' - så må jeg leve med en hardcodet side - pis

- jeg lukker i morgen, ser lige om der skulle kommen en sql-nørd forbi (udover dig slf)

Morten
Avatar billede detox Nybegynder
21. august 2003 - 22:47 #6
Har prøvet med en selfjoin. Hvis jeg har forstået det rigtigt, prøv med:

SELECT a.id AS parent, b.id AS child
FROM test AS a, test AS b
WHERE a.id = b.refid
ORDER  BY parent, child
Avatar billede detox Nybegynder
21. august 2003 - 22:49 #7
Giver output:

1 3
2 5
3 4
3 6

Er ikke helt sikker på at det er det du ønsker?
Avatar billede fangel Nybegynder
22. august 2003 - 14:49 #8
detox => hmm... ikke umidbart - men med lidt anderledes tænkning kan det godt være at det er lykken

---

alternativt er at:

1) hente alle data ud af tabellen (altså det der skal stå på siderne)
2) hente alle IDer og RefIder i et stort array
3) løbe dette array igennem og så ellers prøve at knytte det rigtigt sammen - et stort nok array og en rekursiv funktion burde kunne klare det!

Morten
Avatar billede arne_v Ekspert
22. august 2003 - 14:52 #9
Hvis dit programmerings sprog understøtter dynamisk allokerede objekter
og pointere/referancer kan du jo bare opbygge en struktur on the fly
når du loader data.

Men så er vi vist også så langt fra SQL som man kan komme.
Avatar billede fangel Nybegynder
22. august 2003 - 14:54 #10
arne => det er PHP, det understøtter pointere, men ved ikke om dette er lykken...

vil bare gerne "skåne" min database så meget som muligt ;)

---

så må jeg bare lave et godt cache system og lade være med at generere hele siden "on the fly"

Morten
Avatar billede fangel Nybegynder
03. september 2003 - 18:02 #11
nogle der vil have chancen for point? så synes jeg de skal lægge et svar - ellers æder jeg dem selv ;)

Morten
Avatar billede fangel Nybegynder
12. september 2003 - 22:25 #12
så lukker jeg

Morten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester