select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN
from T_RF,T_FB,T_FORENING
where T_RF.F_USER_ID = T_FB.F_USER_ID
and T_FB.F_USER_ID = T_FORENING.F_USER_ID
------------------
essentitia preter non sans multiplicandum
23 svar · 223 visningar · startad av icaaq
Jag har följande:
T_RF
T_FB
T_FORENING
i dessa vill jag ta ut dessa tre fält:
F_RF_NAMN
F_FB_NAMN
F_FOR_NAMN
och lägga alla namn i ett recordset. Det jag kommer att gå efter är
F_USER_ID
som finns i alla tabellerna. Det kommer väl bli nån sorts join (tror jag) men hur gör man ????
------------------
Korvfarbror--Med ring på fingret
select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN
from T_RF,T_FB,T_FORENING
where T_RF.F_USER_ID = T_FB.F_USER_ID
and T_FB.F_USER_ID = T_FORENING.F_USER_ID
------------------
essentitia preter non sans multiplicandum
Jag har alltså F_USER_ID i variabel på sidan
intID
förstår du ;)
------------------
Korvfarbror--Med ring på fingret
Kanske det.
sql = "select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN
from T_RF,T_FB,T_FORENING
where T_RF.F_USER_ID = T_FB.F_USER_ID
and T_FB.F_USER_ID = T_FORENING.F_USER_ID
and T_FORENING.F_USER_ID = " & intID
------------------
essentitia preter non sans multiplicandum
Men hur gör jag När jag ska skriva ut alla dessa:
sql = "select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN
from T_RF,T_FB,T_FORENING
where T_RF.F_USER_ID = T_FB.F_USER_ID
and T_FB.F_USER_ID = T_FORENING.F_USER_ID
and T_FORENING.F_USER_ID = " & intID
Set ObjRS = ObjConn.Execute(sql)
If objRS.EOF Then
'lala
Else
Response.Write"<select name=""Namn"" tabindex=""1"" >" &vbCrLf
Response.Write"<option style=""background: #FFCC99; color: #000000"">Välj din styrelse</option>" &vbCrLf
Do Until ObjRS.EOF
Response.Write"<option style=""background: #FFCC99; color: #000000"">"&[b]ObjRS("F_LAG_NAMN")[/b]&"</option>" &vbCrLf
ObjRS.Movenext
Loop
'och så stänger vi
hur ska jag göra vi den feta texten ....?
Kan jag skriva ObjRS(0) ??
Eller ska man döpa selecten med AS ?
------------------
Korvfarbror--Med ring på fingret
[Redigerat av icaaq den 01 okt 2001]
Varifrån kommer F_LAG_NAMN?
Du kan använda rs(0) et.c. om du vill. Det är lite vanskligt att använda då det kan orsaka fel om man ändrar på sin select-sats.
Att kolumnerna ligger i olika tabeller har ingen betydelse när man refererar namnen i ADO. Det är kolumnnamnet som man använder.
Att använda AS är användbart om man har samma kolumnnamn i olika tabeller eller om man har ett uttryck i select-listan.
------------------
essentitia preter non sans multiplicandum
:(
Microsoft JET Database Engine error '80040e14'
Syntaxfel i FROM-instruktion.
/Medimatch2/add.asp, line 1219 [b]= execute.raden[/b]
:q
------------------
Korvfarbror--Med ring på fingret
Jag fick till det....men inte riktigt :(
detta kommer vid Response.Write:
select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN from T_RF,T_FB,T_FORENING where T_RF.F_USER_ID = T_FB.F_USER_ID and T_FB.F_USER_ID = T_FORENING.F_USER_ID and T_FORENING.F_USER_ID = 1
men vad jag får ut är bara posterna jag har i T_RF (Det är två stycken), och dem kommer så här:
Sverges innebandy förbund
Sverges innebandy förbund
Sverges innebandy förbund
Sverges innebandy förbund
Sveriges Ishockey förbund
Sveriges Ishockey förbund
Sveriges Ishockey förbund
Sveriges Ishockey förbund
nått som är vaijsing :l
------------------
Korvfarbror--Med ring på fingret
Nja, det är inte så konstigt. Om du joinar två tabeller så får du ju alla kombinationer där det finns en match enligt villkoret.
T.ex.
Om A innehåller
ID!A_DATA
-------
1!A
2!B
och B innehåller
ID!B_DATA
--------
1!A
1!B
1!C
2!D
3!E
och om du kör frågan
select * from a,b where a.id = b.id
så får du 4 poster
ID!ID!A_DATA!B_DATA
-------------------
1!1!A!A
1!1!A!B
1!1!A!C
2!2!B!D
------------------
essentitia preter non sans multiplicandum
ok.... :l
men hur fixar jag till detta da, får jag lov att använda outer eller inner join för att få ut alla namn(endast en gång..
tacksam för hjälp ;)
------------------
Korvfarbror--Med ring på fingret
Om du använder outer eller inner join har ingen betydelse i detta sammanhang. (Det du använder nu är en inner join.)
Det man kan göra är att i presentationen hålla reda på när någon kolumn byter värde och bara i dessa fall skriva ut innehållet
sql = _
"select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN from T_RF,T_FB,T_FORENING where T_RF.F_USER_ID = T_FB.F_USER_ID and T_FB.F_USER_ID = T_FORENING.F_USER_ID and T_FORENING.F_USER_ID = 1 order by F_RF_NAMN "
set rs = connect.execute(sql)
f_rf_namm = ""
while not rs.eof
if f_rf_namn <> rs("f_rf_namn") then
f_rf_namn = rs("(f_rf_namn")
'skriv ut f_rf_namn
end if
'skriv ut övriga kolumner
rs.movenext
wend
Nu vet jag inte om det stämmer med dina kolumnnamn men principen är densamma.
------------------
essentitia preter non sans multiplicandum
Nu har jag så här:
sql = "select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN from T_RF,T_FB,T_FORENING where T_RF.F_USER_ID = T_FB.F_USER_ID and T_FB.F_USER_ID = T_FORENING.F_USER_ID and T_FORENING.F_USER_ID = "& strMMID&" order by F_RF_NAMN "
Response.Write sql
Set ObjRS1 = ObjConn.execute(sql)
If ObjRS1.EOF Then
Response.Write "Du måste lägga in nått där du kan vara styrelsemedlem först"
Else
Response.Write"<select name=""lag"" tabindex=""1"" >" &vbCrLf
Response.Write"<option style=""background: #FFCC99; color: #000000"">Välj ditt lag</option>" &vbCrLf
strRfNamn = ""
strFbNamn = ""
strForNamn = ""
While Not ObjRS1.EOF
If strRfNamn <> ObjRS1("F_RF_NAMN") Then
strRfNamn = ObjRS1("F_RF_NAMN")
Response.Write"<option style=""background: #FFCC99; color: #000000"">"&strRfNamn&"</option>" &vbCrLf
End If
If strFbNamn <> ObjRS1("F_FB_NAMN") Then
strFbNamn = ObjRS1("F_FB_NAMN")
Response.Write"<option style=""background: #FFCC99; color: #000000"">"&strFbNamn&"</option>" &vbCrLf
End If
If strForNamn <> ObjRS1("F_FOR_NAMN") Then
strForNamn = ObjRS1("F_FOR_NAMN")
Response.Write"<option style=""background: #FFCC99; color: #000000"">"&strForNamn&"</option>" &vbCrLf
End If
ObjRS1.Movenext
Wend
'stänger och går hem
men jag får ut dem i denna ordning
<select name="lag" tabindex="1" >
<option style="background: #FFCC99; color: #000000">Välj ditt lag</option>
<option style="background: #FFCC99; color: #000000">Sverges innebandy förbund</option>
<option style="background: #FFCC99; color: #000000">Dalarnas ishockey förbund</option>
<option style="background: #FFCC99; color: #000000">KAIS</option>
<option style="background: #FFCC99; color: #000000">Mora IBF</option>
<option style="background: #FFCC99; color: #000000">dalarnas pingis förbund</option>
<option style="background: #FFCC99; color: #000000">KAIS</option>
<option style="background: #FFCC99; color: #000000">Mora IBF</option>
<option style="background: #FFCC99; color: #000000">Sveriges Ishockey förbund</option>
<option style="background: #FFCC99; color: #000000">Dalarnas ishockey förbund</option>
<option style="background: #FFCC99; color: #000000">KAIS</option>
<option style="background: #FFCC99; color: #000000">Mora IBF</option>
<option style="background: #FFCC99; color: #000000">dalarnas pingis förbund</option>
<option style="background: #FFCC99; color: #000000">KAIS</option>
<option style="background: #FFCC99; color: #000000">Mora IBF</option>
</select>
inte precis som jag tänkt mig... :l
Går det att fixa så att de kommer i fallande ordning från RF-->FB-->Forening
Som ni ser har RF bara kommit med två ggr :) men FB och Forening kommit med flera ggr :(
vad/hur ska jag göra :q
------------------
Korvfarbror--Med ring på fingret
Jag har nog kommit fram till att du inte behöver en join utan en union
sql = "select F_RF_NAMN as NAMN from T_RF " & _
" where F_USER_ID = " & strMMID & _
"union select F_FB_NAMN from T_FB " & _
" where F_USER_ID = " & strMMID & _
"union select F_FOR_NAMN from T_FORENING " & _
" where F_USER_ID = " & strMMID & _
" order by 1"
Response.Write sql
Set ObjRS1 = ObjConn.execute(sql)
If ObjRS1.EOF Then
Response.Write "Du måste lägga in nått där du kan vara styrelsemedlem först"
Else
Response.Write"<select name=""lag"" tabindex=""1"" >" &vbCrLf
Response.Write"<option style=""background: #FFCC99; color: #000000"">Välj ditt lag</option>" &vbCrLf
While Not ObjRS1.EOF
Response.Write"<option style=""background: #FFCC99; color: #000000"">"& objRS1("NAMN")&"</option>" &vbCrLf
ObjRS1.Movenext
Wend
'stänger och går hem
Union innebär att man slår ihop resultatet av två eller flera frågor och samtidigt tar bort alla duplikat.
Ursäkta att jag ledde dig lite på villospår där, förhoppningsviss så har du i alla fall lärt dig något.
------------------
essentitia preter non sans multiplicandum
Union innebär att man slår ihop resultatet av två eller flera frågor och samtidigt tar bort alla duplikat.
precis så vill jag ha det :e
Men, detta kommer upp :(
Error Type:
Microsoft JET Database Engine (0x80040E14)
Syntax error (missing operator) in query expression 'F_USER_ID = 1union select F_FB_NAMN from T_FB where F_USER_ID = 1union select F_FOR_NAMN from T_FORENING where F_USER_ID = 1'.
eftersom jag aldrig gjort nåt sånt här kan jag inte testa mig fram (vågar inte än).... så det finns bara ett sätt att lösa det på ....
slänga upp det på wF
PS. Jag har lärt mig en del i dag iaf ;) DS
------------------
Korvfarbror--Med ring på fingret
sql = "select F_RF_NAMN as NAMN from T_RF " & _
" where F_USER_ID = " & strMMID & _
" union select F_FB_NAMN from T_FB " & _
" where F_USER_ID = " & strMMID & _
" union select F_FOR_NAMN from T_FORENING " & _
" where F_USER_ID = " & strMMID & _
" order by 1"
Missade blank framför union
------------------
essentitia preter non sans multiplicandum
:e
Nu funkar det som FAN ;)
Bara en sak till, går det att göra så att den sorterar efter
RF-->FB-->Förening :q
------------------
Korvfarbror--Med ring på fingret
Så här kan man göra det.
sql = "select F_RF_NAMN as NAMN,1 from T_RF " & _
" where F_USER_ID = " & strMMID & _
" union select F_FB_NAMN,2 from T_FB " & _
" where F_USER_ID = " & strMMID & _
" union select F_FOR_NAMN,3 from T_FORENING " & _
" where F_USER_ID = " & strMMID & _
" order by 2,1"
------------------
essentitia preter non sans multiplicandum
:e :e :e :e :e :e
Så glad är jag nu. Bara för att försökra er hur glad jag är så:
:e :e :e :e :e :e
Tack LarsG
Jag kommer tillbaks imorrn ;)
------------------
Korvfarbror--Med ring på fingret