webForumDet fria alternativet

har siten undanag? Select fråga

5 svar · 144 visningar · startad av mrblonde

mrblondeMedlem sedan aug. 20012 349 inlägg
#1

har en tabell med undantag
tblException
exceptionid
exceptionname

har en tabell som knyter undantagen till visa siter
tblExceptionInSite
eisexceptionid
eissiteid

Nu vill jag på en asp sida lista alla undantag som finns i tblException samt för varje undantag kolla om en viss specifik site har det här undantaget. tblExceptionInSite innehåller bara en rad om siten har undantaget, annars inte.

Man kan ju göra två select satser och loppa runt i dem och jämföra eller liknande, men det vore ju smartare om man kunde skriva en enda selectsats som gör det direkt.

typ: select exceptionid, exceptionname, sitenhar FROM tblException, tblExceptionInSite WHERE eissiteid = " & siteid & " AND ??????

"sitenhar" skulle då bli typ 1 eler 0 beroende på om siten har undantaget.

Hoppas att någon förstår vad jag menar :)

[r] förtydligade [/r]

------------------
National Blonde Day!
"Yeah, bam, bam, bam, bam, bam. I told 'em not to touch the alarm"

[Redigerat av mrblonde den 24 sep 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select exceptionid, exceptionname,  
case when eissiteid is null then 0 else 1 end as isHere
FROM tblException left outer join tblExceptionInSite on 
exceptionid = eisexceptionid
WHERE coalesce(eissiteid,1) = 1

red: ändrar efter förtydligande
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 24 sep 2001]

mrblondeMedlem sedan aug. 20012 349 inlägg
#3

toppen! FUnkade bra om jag bytte ut mot riktiga id:n, menjag var tvungen att byta ut 1 efter eissiteid,

vad är
coalesce(eissiteid,1) = 1

för funktion, eller snarare vad betyder ,1 efter eissiteid?

Är det id:t?

------------------
National Blonde Day!
"Yeah, bam, bam, bam, bam, bam. I told 'em not to touch the alarm"

LarsGMedlem sedan dec. 200012 464 inlägg
#4

coalesce(eissiteid,1) = 1

är samma sak som

case when eissiteid is null then 1 else eissiteid end

den returnerar alltså första värdet som inte är null (eller sista värdet om alla argument är null). Coalesce kan ta ett godtyckligt antal parametrar.

------------------
essentitia preter non sans multiplicandum

mrblondeMedlem sedan aug. 20012 349 inlägg
#5

eh.. det är mycket underligt.

om tabellen innehåller en rad (en enda rad), dvs tex
tblExceptionInSite
eissiteid 14
eisexceptionid 1

och min exception tabell
tblException
exceptionid 1
exceptionname EX_NAME

Så om man kör din sql fråga med ett annat siteid än 14 får man en EOF. Inte ett svar där isHere är 0! Detta inträffar bara om tabellen ExceptionInSite innehåller någon rad, är den tom funkar det, innehåller den ne rad och man frågar om det siteid som ligger där så funkar det, men som sagt inte om det finns en rad (eller flera) och frågar med ett site id som inte finns i tabellen!!

Hur, jag fattar inte varför det blir så...

Detta innebär att det plötsligt blev svårt för mig att lägga in fler poster. Eftersom jag förlitar mig på din sql för att loopa fram alla olika exceptions. Men när jag då slår på exceptionen för en site så får inte sql frågan fram något när jag går in på en annan site i mitt admin.

jag vill ju kunna knyta flera siter till samma exception, ex:

tblExceptionInSite
eissiteid eisexceptionid
14 1
32 1
4 1

och min exception tabell
tblException
exceptionid exceptionname
1 EX_NAME

Den här tabellen kan naturligtvis innehålla mer än ett exception...

Min site tabell innehåller kanske hundratals siter och jag vill kunna slå på en exception för vissa av dem.

Jag är dig evigt tacksam för lite hjälp!

------------------
National Blonde Day!
"Yeah, bam, bam, bam, bam, bam. I told 'em not to touch the alarm"

[Redigerat av mrblonde den 24 sep 2001]

mrblondeMedlem sedan aug. 20012 349 inlägg
#6

löste det med en lite omgörning:)

select exceptionid, exceptionname, 
case when eissiteid is null then 0 else 1 end as isHere
FROM tblException left outer join tblExceptionInSite on 
exceptionid = eisexceptionid
WHERE coalesce(eissiteid,1) = 1 

byt WHERE mot AND sist 

select exceptionid, exceptionname, 
case when eissiteid is null then 0 else 1 end as isHere
FROM tblException left outer join tblExceptionInSite on 
exceptionid = eisexceptionid
AND coalesce(eissiteid,1) = 1

Jihoo! :)

------------------
National Blonde Day!
"Yeah, bam, bam, bam, bam, bam. I told 'em not to touch the alarm"

128 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)