/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Avanceret SQL
Fra : Jimmy


Dato : 03-09-03 09:28

Hey

Ok, nu er jeg kommet på en opgave jeg ikke helt kan gennemskue.

Jeg har en database med brugere som jeg henter ind.

Select id, brugernavn, titelnavn blablabla... from brugerDB where blablabla
order by brugernavn
Alt i alt ender jeg med en ordentlig omgang brugere i mit recordset. Det er
vigtigt med sorteringen til sidst.

For hver bruger bliver der kørt noget kode

while not rs_brugere.EOF
blabla

wend

Inde i denne lykke skal jeg hente oplysninger fra en anden tabel. Tabellen
afgør om der skal sendes en mail eller ej. Tabellen er opbygget på følgende
måde

id - Rækkens id
felt1 - felt 1 til 7 er en bit der er enten true eller false alt
efter om der skal sendes en mail eller ej
felt2
felt3
felt4
felt5
felt6
felt7
titel_navn_id - Dette er enten id fra BrugerDB eller fra titelDB
titnav - Værdien er enten tit eller nav alt efter om det er et
titelid eller et brugerid


titelDB:
id
titelnavn

Det jeg gerne vil have er en sql der kan give mig

id fra bruger tabellen
brugernavn fra brugertabellen
felt 1 - 7 fra mailtabellen

Problemet for mig er at jeg lige nu først henter alle bruger
for hver bruger
henter jeg en række i mailtabellen hvor jeg bruger id og nav
Hvis der ikke kommer nogen rækker
henter jeg titel id'et ud fra titelnavnet på brugeren (der kan ikke være
2 ens, og jeg ved godt at det skulle have været id på brugeren)
herefter kører jeg samme sql for mailtabellen, men denne gang med
titelid og tit
end if
wend

Da der kan være op til 40 brugere og det som regel ligger i titlerne på
mailtabellen betyder det i virkeligheden at der bliver kørt 120 SQL'er i
løkken. Det tager alt for lang tid, så der må da være en måde hvor jeg kan
køre en SQL i stedet?

Nogen der kan hjælpe med nogle ideer?


--


Jimmy



 
 
Peter Lykkegaard (03-09-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-09-03 11:36


"Jimmy" <pleasereplyingroup@hotmail.com> wrote in message
news:3f55a46f$0$54840$edfadb0f@dread11.news.tele.dk...

> Nogen der kan hjælpe med nogle ideer?
>
Jada - men du glemte at angive din platform
Jeg går ud fra at brugerdb og titeldb er fra samme database?

mvh/Peter Lykkegaard



Jimmy (03-09-2003)
Kommentar
Fra : Jimmy


Dato : 03-09-03 13:49

"Peter Lykkegaard" <polonline@hot.mail.com> skrev i en meddelelse
news:3uj5b.56$jo6.10@news.get2net.dk...
>
> "Jimmy" <pleasereplyingroup@hotmail.com> wrote in message
> news:3f55a46f$0$54840$edfadb0f@dread11.news.tele.dk...
> Jada - men du glemte at angive din platform
> Jeg går ud fra at brugerdb og titeldb er fra samme database?

Korrekt. I SQL Server. :)

Men jeg tror faktisk at Kristians svar har løsningen.

Jimmy



Kristian Damm Jensen (03-09-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 03-09-03 11:33

"Jimmy" <pleasereplyingroup@hotmail.com> skrev i en meddelelse
news:3f55a46f$0$54840$edfadb0f@dread11.news.tele.dk...
> Hey
>
> Ok, nu er jeg kommet på en opgave jeg ikke helt kan gennemskue.
>
> Jeg har en database med brugere som jeg henter ind.
>
> Select id, brugernavn, titelnavn blablabla... from brugerDB where
blablabla
> order by brugernavn
> Alt i alt ender jeg med en ordentlig omgang brugere i mit recordset. Det
er
> vigtigt med sorteringen til sidst.
>
> For hver bruger bliver der kørt noget kode
>
> while not rs_brugere.EOF
> blabla
>
> wend
>
> Inde i denne lykke skal jeg hente oplysninger fra en anden tabel. Tabellen
> afgør om der skal sendes en mail eller ej. Tabellen er opbygget på
følgende
> måde
>
> id - Rækkens id
> felt1 - felt 1 til 7 er en bit der er enten true eller false alt
> efter om der skal sendes en mail eller ej
> felt2
> felt3
> felt4
> felt5
> felt6
> felt7
> titel_navn_id - Dette er enten id fra BrugerDB eller fra titelDB
> titnav - Værdien er enten tit eller nav alt efter om det er
et
> titelid eller et brugerid
>
>
> titelDB:
> id
> titelnavn
>
> Det jeg gerne vil have er en sql der kan give mig
>
> id fra bruger tabellen
> brugernavn fra brugertabellen
> felt 1 - 7 fra mailtabellen
>
> Problemet for mig er at jeg lige nu først henter alle bruger
> for hver bruger
> henter jeg en række i mailtabellen hvor jeg bruger id og nav
> Hvis der ikke kommer nogen rækker
> henter jeg titel id'et ud fra titelnavnet på brugeren (der kan ikke
være
> 2 ens, og jeg ved godt at det skulle have været id på brugeren)
> herefter kører jeg samme sql for mailtabellen, men denne gang med
> titelid og tit
> end if
> wend
>
> Da der kan være op til 40 brugere og det som regel ligger i titlerne på
> mailtabellen betyder det i virkeligheden at der bliver kørt 120 SQL'er i
> løkken. Det tager alt for lang tid, så der må da være en måde hvor jeg kan
> køre en SQL i stedet?
>
> Nogen der kan hjælpe med nogle ideer?

Find det hele i ét stort join.

Brug outer join og sæt mailDB på i to instanser

select *
from (brugerDB b
outer join mailDB m1
on b.id = m1.titel_navn_id
and m.titnav = 'nav')
outer join titelDB t
on b.titelnavn = t.titelnavn
outer join mailDB m2
and t.titel_id = m2.id
and m2.titnav ='tit')

VH
Kristian



Jimmy (03-09-2003)
Kommentar
Fra : Jimmy


Dato : 03-09-03 13:52

"Kristian Damm Jensen" <REdammMOVE@ofir.dk> skrev i en meddelelse
news:bj4g7e$f04oe$1@ID-146708.news.uni-berlin.de...
> "Jimmy" <pleasereplyingroup@hotmail.com> skrev i en meddelelse
> news:3f55a46f$0$54840$edfadb0f@dread11.news.tele.dk...

> Find det hele i ét stort join.
>
> Brug outer join og sæt mailDB på i to instanser
>
> select *
> from (brugerDB b
> outer join mailDB m1
> on b.id = m1.titel_navn_id
> and m.titnav = 'nav')
> outer join titelDB t
> on b.titelnavn = t.titelnavn
> outer join mailDB m2
> and t.titel_id = m2.id
> and m2.titnav ='tit')

Jeg er næsten overbevist om at det er løsningen, men er der ikke et eller
andet med paranteserne her?
Jeg havde ikke lige tænkt på at bruge samme tabel 2 gange i samme join. Er
det det man kalder self join, eller...?

Jeg prøver lige at lege med den her, og hvis det virker hører i ikke mere,
hehe... ;)

Tak for hjælpen :)


Jimmy



Kristian Damm Jensen (03-09-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 03-09-03 13:48


"Jimmy" <pleasereplyingroup@hotmail.com> skrev i en meddelelse
news:3f55e23b$0$54833$edfadb0f@dread11.news.tele.dk...
> "Kristian Damm Jensen" <REdammMOVE@ofir.dk> skrev i en meddelelse
> news:bj4g7e$f04oe$1@ID-146708.news.uni-berlin.de...
> > "Jimmy" <pleasereplyingroup@hotmail.com> skrev i en meddelelse
> > news:3f55a46f$0$54840$edfadb0f@dread11.news.tele.dk...
>
> > Find det hele i ét stort join.
> >
> > Brug outer join og sæt mailDB på i to instanser
> >
> > select *
> > from (brugerDB b
> > outer join mailDB m1
> > on b.id = m1.titel_navn_id
> > and m.titnav = 'nav')
> > outer join titelDB t
> > on b.titelnavn = t.titelnavn
> > outer join mailDB m2
> > and t.titel_id = m2.id
> > and m2.titnav ='tit')
>
> Jeg er næsten overbevist om at det er løsningen, men er der ikke et eller
> andet med paranteserne her?

Sikkert, jeg garanterer ikke for noget. Det er egentlig kun skrevet så
detaljeret ned for at du skulle forstå, hvad jeg mente. Detaljerne overlader
jeg til dig.

> Jeg havde ikke lige tænkt på at bruge samme tabel 2 gange i samme join. Er
> det det man kalder self join, eller...?

Ikke i dette tilfælde. Der er jo netop ingen interaktion mellem de to
instanser af mailDB.

> Jeg prøver lige at lege med den her, og hvis det virker hører i ikke mere,
> hehe... ;)
>
> Tak for hjælpen :)

Velbekomme.

Kristian



Søg
Reklame
Statistik
Spørgsmål : 177516
Tips : 31968
Nyheder : 719565
Indlæg : 6408629
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste