webForumDet fria alternativet

subselect...

7 svar · 218 visningar · startad av icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#1

jag håller på att lägga in massa innebandymatcher i ett dbms(mySQL) och jag undrar nu om detta är ett bra sätt.

jag har en tabell (t_lag) med alla lag:

LagID!LagNamn!osv!osv
---------------------
1!AIK!osv!osv

och sen har jag en tabell (t_matcher) med alla matcher och dylikt.

MatchID!Hemmalag!Bortalag!osv

Är det bättre att lägga in lagID istället LagNamn i tabellen med matcherna?

------------------
Icaaq, mannen med korven. (!)

[Redigerat av icaaq den 01 nov 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Om du har behov av att kunna uppdatera lagNamn så skall du använda ett Lagid i Matchtabellen, annars går det på ett ut.

Om det är bra annars beror på vilken information du vill kunna plocka ut.

Vad har detta med subselect att göra?

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

icaaqMedlem sedan okt. 20005 273 inlägg
#3

Vad har detta med subselect att göra?

Jag tänkte ställa fler frågor i det första inlägget, men då gör jag det nu istället.....

om jag kör med lagID i match tabellen då blir det ju en hel del selectsatser när jag ska visa alla matcherna i en serie....

jag har en tanke om hur det ska se ut men rätta mig om den är fel:

strSQL = "SELECT hemmalag, bortalag from t_matcher "&_
"WHERE serie = '"&strSerie&'"
Set ObjRS = ObjConn.Execute(strSQL)
If ObjRS.EOF Then
'inga matcher
Else
Do until ObjRS.EOF
strSQL2 = "SELECT LagNamn t_lag "&_
"WHERE LagID = "&ObjRS("hemmalag")&"
Set ObjRS2 = ObjConn.execute(strSQL2)
If ObjRS2.EOF Then
'nått blev fel
Else
'skriv ut hemmalagets info
End If
strSQL3 = "SELECT LagNamn t_lag "&_
"WHERE LagID = "&ObjRS("Bortalag")&"
Set ObjRS3 = ObjConn.execute(strSQL3)
If ObjRS3.EOF Then
'nått blev fel
Else
'skriv ut Bortalagets info
End If
ObjRS.Movenext
Loop
End If

är detta rätt tänkt eller går det att göra smidigare? :q

------------------
Icaaq, mannen med korven. (!)

[Redigerat av icaaq den 01 nov 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Det går att göra så att du får ut all information i en fråga

SELECT h.lagNamn as hnamn, 
       h.x as hx,
       h.y as hy,
       b.lagnamn as bnamn,
       b.x as bx,
       b.y as by 
  from t_lag as h join t_matcher 
    on h.lagid = hemmalag join
       t_lag as b on bortalag = b.lagid
 where serie = 'Serie 4711'

red: syntaxfel i sql.

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

[Redigerat av LarsG den 01 nov 2001]

icaaqMedlem sedan okt. 20005 273 inlägg
#5

Vet du att det går att göra så här i mySQL??

------------------
Icaaq, mannen med korven. (!)

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Jag är ganska säker på att det fungerar även i Mysql.

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

icaaqMedlem sedan okt. 20005 273 inlägg
#7

nu har jag denna.

SELECT h.F_LAG_NAMN as hnamn,
b.F_LAG_NAMN as bnamn 
from t_lag as h join t_match on h.f_lag_id = f_hemmalag 
join t_lag as b on f_bortalag = b.lagid where f_serie_namn = 'haha'

men jag får

You have an error in your SQL syntax near 'on h.f_lag_id = f_hemmalag 
join t_lag as b on f_bortalag = b.lagid where f_serie'

...jag fattar ju inget av detta så vad kan vara fel?

------------------
Icaaq, mannen med korven. som hejar på Bajen(!)

LarsGMedlem sedan dec. 200012 464 inlägg
#8

Något syntax-fel är det inte (inte enligt standard sql i alla fall).
Det beror nog mer på någon brist i Mysql. Om du testar med att kvalificera alla kolumnreferenser då

SELECT h.F_LAG_NAMN as hnamn,
b.F_LAG_NAMN as bnamn 
from t_lag as h join t_match as t on h.f_lag_id = t.f_hemmalag 
join t_lag as b on t.f_bortalag = b.lagid where t.f_serie_namn = 'haha'

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

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