Avatar billede hanshenp Nybegynder
15. april 2004 - 01:35 Der er 2 kommentarer og
1 løsning

Sortering af database output, efter et join

Jeg har 2 tabeller, som ser har følgende opstilling:

Tabel 1: main_menu
mainId
name
placement // Er et nummer fra 1 til x, som afgører placeringen på denne

Tabel 2: sub_menu
subId
mainId // Er en foreignkey til mainId i tabel 1
name
placement

Jeg forstillede mig så, at jeg kunne opstille EN sql sætning, som ville hente, samtlige data fra begge tabeller, og derefter ordne dem efter placering på tabel 1 først, og dernæst sætte dataene fra tabel 2 ind imellem disse data, alt efter foreignkey og placement... et eksempel kunne være:

Tabel 1 // mainId x // placement 1
  Tabel 2 // subId y // mainId x // placement 1
  Tabel 2 // subId z // mainId x // placement 2
Tabel 1 // mainId q // placement 2
  Tabel 2 // subId h // mainId q // placement 1
  Tabel 2 // subId j // mainId q // placement 2

Ved ikke helt, hvor tydeligt det er formuleret, men det er halv svært at forklare.
Avatar billede arne_v Ekspert
15. april 2004 - 07:41 #1
Ikke umiddelbart.

Nogle muligheder:

SELECT * FROM tabel1 LEFT JOIN tabel2 ON tabel1.mainId=tabel2.mainId ORDER BY tabel1.placement;

og så lade applikationen undlade at udskrive duplikaterne af tabel1 info

SELECT * FROM tabel1 ORDER BY placement;
SELECT * FROM tabel2 WHERE mainId=X;

applikationen laver den ene query på en connection og for hver værdi den finder
laver den den anden query på en anden connection
Avatar billede trer Nybegynder
15. april 2004 - 07:42 #2
En sortering og et output som du angiver får man ikke direkte i SQL.

Resultatet for en query vil altid være på formen

  t1.mainid, t1.name, t1.placement, t2.subid, t2.name, t2.placement

Altså samtlige kolonner du udtrækker på en række. 

Den sortering du ønsker kan du vel lave ved blot at angive

ORDER BY t1.placement, t2.placement

Og hvis du vil have data opstillet som du angiver, så må du i din kode undertrykke visningen af kolonner afhængigt af niveau.
Avatar billede hanshenp Nybegynder
21. april 2004 - 19:59 #3
hvis man benytter et join, vil man ikke få samtlige rækker med, det kan man derimod, ved at benytte sig af union... Har fået det til at virke

I skal have tak for hjælpen
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