Avatar billede kimlarsen1978 Nybegynder
24. juli 2007 - 23:38 Der er 14 kommentarer og
1 løsning

Bøvl med WHERE i forbindelse med LEFT JOIN

Hejsa
Jeg kan ikke få denne sætning korrekt sat sammen:

SELECT banner.*, ipundtagelser.ipadresse FROM banner LEFT JOIN ipundtagelser ON (banner.hjemmesider = ipundtagelser.hjemmesider  WHERE ipundtagelser.ipadresse = 'xx.xx.xxx.xxx') WHERE banner.hjemmesider = 12 ORDER BY banner.sortering

Det er denne del: WHERE ipundtagelser.ipadresse = 'xx.xx.xxx.xxx' der får det til at fucke op.

I dette tilfælde har jeg brug for at vide om ipadressen 'xx.xx.xxx.xxx' findes i undtagelsestabellen for hjemmeside 12.

Sætter jeg "ipundtagelser.ipadresse = 'xx.xx.xxx.xxx'" sammen med den yderste WHERE virker det, men jeg får bare ikke det rigtige resultat.

Jeg vil ALTID have felterne fra "banner" med ud, men er der et match i tabellen ipundtagelser vil jeg også have det med...
Avatar billede kalp Novice
24. juli 2007 - 23:47 #1
hvis det ikke er left så er det jo right
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 13:35 #2
Det er ikke det der er mit problem (tror jeg da ikke), jeg får en fejl på den innderste WHERE, den vil den ikke acceptere...

Jeg har en tabel "banner" og en tabel "ipundtagelser"

Banner indeholder felterne:
id, hjemmesider, bannertekst, sortering

ipundtagelser indeholder felterne
id, hjemmesider, ipadresse

Indholdet kunne være

Banner
1, '12', 'tekst1', 'A'
2, '13', 'tekst2', 'C'
3, '12', 'tekst3', 'P'
4, '9', 'tekst4', 'W'

ipundtagelser
1, '12', '12.12.122.122'
2, '13', '12.12.122.123'
3, '9', '12.12.122.124'

Hvis jeg så spørger med:
SELECT banner.bannertekst, ipundtagelser.ipadresse FROM banner LEFT JOIN ipundtagelser ON (banner.hjemmesider = ipundtagelser.hjemmesider  WHERE ipundtagelser.ipadresse = '12.12.122.123') WHERE banner.hjemmesider = 12 ORDER BY banner.sortering

skulle jeg gerne få
'tekst1' fra "banner" og et blank felt fra "ipundtagelser"

Hvis jeg så spørger med:
SELECT banner.bannertekst, ipundtagelser.ipadresse FROM banner LEFT JOIN ipundtagelser ON (banner.hjemmesider = ipundtagelser.hjemmesider  WHERE ipundtagelser.ipadresse = '12.12.122.123') WHERE banner.hjemmesider = 13 ORDER BY banner.sortering

skulle jeg gerne få
'tekst2' fra "banner" og '12.12.122.123' fra "ipundtagelser"

Er det til at forstå?
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 13:38 #3
Ups... i det første eksempel hvor jeg spørger på "WHERE banner.hjemmesider = 12", skulle jeg gerne få 2 og ikke 1...

Jeg skulle gerne få
'tekst1' fra "banner" og et blank felt fra "ipundtagelser"
'tekst3' fra "banner" og et blank felt fra "ipundtagelser"
Avatar billede michael_stim Ekspert
25. juli 2007 - 13:39 #4
Kan man ikke bare flytte WHERE ud til den anden?

SELECT banner.bannertekst, ipundtagelser.ipadresse FROM banner LEFT JOIN ipundtagelser ON banner.hjemmesider = ipundtagelser.hjemmesider  WHERE ipundtagelser.ipadresse = '12.12.122.123' AND banner.hjemmesider = 12 ORDER BY banner.sortering
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 13:49 #5
Nej, for så får jeg jo ingen hits fra banner tabellen hvis ikke også der er hit på idadresse i ipundtagelser....
Avatar billede michael_stim Ekspert
25. juli 2007 - 13:50 #6
Jaha på den måde. Byt AND ud med OR
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 13:54 #7
Det må i "dum" tekst være noget med

Gi mig de ønskede felter fra "banner" hvor feltet "hjemmesider" har værdien 12, gi mig også de feltet "ipadresse" fra "ipundtagelser", hvis feltet "ipundtagelser.hjemmesider" matcher "banner.hjemmesider" og ipadresse matcher værdien '12.12.122.123' eller skal feltet ipadresse bare returneres blank
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 13:57 #8
Hmmm, måske det løser det...
Det tjekker jeg lige om 20 minutter, skal lige kort noget andet :o)
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 14:37 #9
Det holder ikke...
Jeg får "falske" hits
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 14:40 #10
Bruger jeg "OR" giver det samme resultat som hvis jeg helt undlader

OR ipundtagelser.ipadresse = 'xx.xx.xxx.xxx'
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 14:46 #11
Tror jeg er på vildspor... lad mig lige tjekke om det jeg vil overhoved kan lade sig gøre i én SQL sætning, for det tror jeg ikke det kan alligevel
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 16:25 #12
Jeg har løst det ved at jeg spørger databasen en ekstra gang om der er match i den anden tabel....

Det kører jeg med endtil videre...

AnyWay - Tak for din hjælp.
Smidt et svar så får du selvfølgelig points alligevel.
Avatar billede michael_stim Ekspert
25. juli 2007 - 16:26 #13
Moi? Jeg samler ikke på point, ellers tak ;o)
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 23:07 #14
Lukker
(Savner funktionalitet til at lukke en sag, uden at den kommer til at stå som med "svar")
Avatar billede kimlarsen1978 Nybegynder
25. juli 2007 - 23:08 #15
Tak for din indsats!
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