webForumDet fria alternativet

Join i flera steg

8 svar · 480 visningar · startad av SannyW

SannyWMedlem sedan jan. 2003438 inlägg
#1

Hej!

Får inte rätt på joins, försöker lägga till att id byts ut mot namn.

Har nedanstående kod:

SELECT t.t_name, m.m_datum, m.m_matchnr, m.m_hometeam, m.m_awayteam, "&_ 
m.m_homegoals, m.m_awaygoals, m.m_ot, l.l_season, l.l_name, m.m_omg "&_
FROM (tbl_league as l "&_
"INNER JOIN tbl_team as t ON l.l_teamID = t.t_teamID) " &_  
"INNER JOIN tbl_matches as m ON l.l_leagueID = m.m_leagueID " &_
"WHERE t.t_name = '"& strM &"' AND l.l_comp = '"& strC &"' "&_
" AND l.l_season = '"& strSeason &"' "&_
" ORDER BY m.m_leagueID, m.m_omg, m.m_datum, m.m_matchnr"

Försöker bygga till enligt nedanstående kod, men fattar inte riktigt hur och från vilket håll jag kan få in ytterligare en join.

"    from"&_
"        lag"&_
"        left join tbl_matches "&_
"        on t.ID = g.m_hometeam or t.ID = g.m_awayteam"&_
"    group by"&_
"        t.ID,t.lagNamn "&_

Hoppas någon förstår vad jag menar, tack på förhand.

@ndersMedlem sedan juni 200032 969 inlägg
SannyWMedlem sedan jan. 2003438 inlägg
#3

Okey, sorry.

Tack för ditt svar @nders, hoppas detta är lite mer utförligt och överskådligt.

- Har precis gått över till att använda mysql som databas, MySQL 4.1-serien (loopia).

- Befintlig SQL-fråga är enligt ovan, den fungerar men lagnamnen kommer fram som nummer då jag inte får rätt på länkningen t ex mellan tbl_matches.m_hometeam och tbl_lag.ID, som sedan skall skrivas ut som tbl_lag.lagNamn

- Får inget felmeddelande, bara ett dåligt resultat.

- För att förklara min WHERE sats en aning så hämtas viss information med hjälp av Querystring som t ex default.asp?m=herrar&s=spelprogram&c=serie&y=2005/2006

Vilket då blir:
m=herrar hämtar från tbl_team.t_name (sektionsnamnet)
c=serie hämtar från tbl_league.l_comp (typ av tävling)
y=2005/2006 hämtar från tbl_league.l_season (aktuell säsong)

- Har fyra tabeller:
tbl_lag (här finns olika föreningsnamn)
.ID
.lagNamn

tbl_league
.l_leagueID
.l_teamID
.l_comp
.l_name
.l_season

tbl_matches
.ID
.m_leagueID
.m_datum
.m_omg
.m_hometeam
.m_awayteam
.m_homegoals
.m_awaygoals
.m_ot

tbl_team (här finns de olika lagen inom föreningen)
.t_teamID
.t_name
.t_sektion

- Förväntat resultat, något i denna stilen, vilket fungerar med den första koden. Men nu presenteras lagnamnen med en siffra istället.

2006-01-15 13:00 IBK Dalen - Södertälje IBK 4-4 SD

typ:

2006-01-15 13:00 25 - 3 4-4 SD

@ndersMedlem sedan juni 200032 969 inlägg
#4

Det jag eftersökte var framförallt dbms, och en fin SQL-fråga. Släng bort allt junk från ASP / andra scriptspråk, så slipper man börja gråta när man försöker skaffa en översikt. =)

SannyWMedlem sedan jan. 2003438 inlägg
#5

Då gör vi ett försök till, hoppas jag fått bort allt junk.

DRIVER={MySQL ODBC 3.51 Driver}

arrRecords = GetRows("SELECT t.t_name, m.m_datum, m.m_matchnr, m.m_hometeam, m.m_awayteam, m.m_homegoals, m.m_awaygoals, m.m_ot, l.l_season, l.l_name, m.m_omg 
FROM (tbl_league as l  
INNER JOIN tbl_team as t ON l.l_teamID = t.t_teamID)
INNER JOIN tbl_matches as m ON l.l_leagueID = m.m_leagueID 
ORDER BY m.m_leagueID, m.m_omg, m.m_datum, m.m_matchnr"
SannyWMedlem sedan jan. 2003438 inlägg
#6

Blir inte klok på detta, nu har jag hamnat på sidorspår känns det som och försöker få in en replace. Nu skiftar den ut id mot Lagnamn, men den skriv ut dubbelrader och då blir t ex hometeam rätt medan awayteam blir fel.

typ:

5 - LAGNAMN(10)
LAGNAMN(5) - 10

Vilket då skulle blivit:
LAGNAMN(5) - LAGNAMN(10)

arrRecords = GetRows("SELECT 
t.t_name, 
m.m_datum, 
m.m_matchnr, 
m.m_hometeam, 
m.m_awayteam, 
m.m_homegoals, 
m.m_awaygoals, 
m.m_ot, 
l.l_season, 
l.l_name, 
m.m_omg, 
la.ID, 
la.lagNamn FROM (tbl_league as l
INNER JOIN tbl_team as t ON l.l_teamID = t.t_teamID) 
INNER JOIN tbl_matches as m ON l.l_leagueID = m.m_leagueID 
INNER JOIN tbl_lag as la ON la.ID = m.m_hometeam or la.ID = m.m_awayteam
WHERE t.t_name = '"& strM &"' AND l.l_comp = '"& strC &"' AND l.l_season = '"& strSeason &"'
ORDER BY m.m_leagueID, m.m_omg, m.m_datum, m.m_matchnr")

'// Posthantering 
If IsArray(arrRecords) then

 	For i = 0 To Ubound(arrRecords,2)

	strName = arrRecords(0,i)	
	strDatum = arrRecords(1,i)	
	strMatchnr = arrRecords(2,i)	
	strHometeam = arrRecords(3,i)
	strAwayteam = arrRecords(4,i)	
	strHomegoals = arrRecords(5,i)	
	strAwaygoals = arrRecords(6,i)	
	strOT = arrRecords(7,i)	
	strSeason = arrRecords(8,i)	
	strDivision = arrRecords(9,i)
	strOmg = arrRecords(10,i)
	strLaID = arrRecords(11,i)	
	strLaName = arrRecords(12,i)

	strHometeam = Replace(strHometeam, strLaID, strLaName) 
	strAwayteam = Replace(strAwayteam, strLaID, strLaName)
SannyWMedlem sedan jan. 2003438 inlägg
#7

Hittade en lösning så här, men det var inte den vackraste jag har skådat. Känns som jag snurrar mer än vad jag behöver.

arrRecords = GetRows("SELECT t.t_name, m.m_datum, m.m_matchnr, m.m_hometeam, m.m_awayteam, m.m_homegoals, m.m_awaygoals, m.m_ot, l.l_season, l.l_name, m.m_omg, la1.ID, la1.lagNamn, la2.ID, la2.lagNamn FROM (tbl_league as l  "&_
  "INNER JOIN tbl_team as t ON l.l_teamID = t.t_teamID) " &_
  "INNER JOIN tbl_matches as m ON l.l_leagueID = m.m_leagueID " &_
  "INNER JOIN tbl_lag as la1 ON la1.ID = m.m_hometeam " &_
  "INNER JOIN tbl_lag as la2 ON la2.ID = m.m_awayteam " &_
  " WHERE t.t_name = '"& strM &"' AND l.l_comp = '"& strC &"' AND l.l_season = '"& strSeason &"' "&_
  "ORDER BY m.m_leagueID, m.m_omg, m.m_datum, m.m_matchnr")

'// Posthantering 
If IsArray(arrRecords) then

 	For i = 0 To Ubound(arrRecords,2)

	strName = arrRecords(0,i)	
	strDatum = arrRecords(1,i)	
	strMatchnr = arrRecords(2,i)	
	strHometeam = arrRecords(3,i)
	strAwayteam = arrRecords(4,i)	
	strHomegoals = arrRecords(5,i)	
	strAwaygoals = arrRecords(6,i)	
	strOT = arrRecords(7,i)	
	strSeason = arrRecords(8,i)	
	strDivision = arrRecords(9,i)
	strOmg = arrRecords(10,i)
	strLa1ID = arrRecords(11,i)
	strLa1Namn = arrRecords(12,i)
	strLa2ID = arrRecords(13,i)
	strLa2Namn = arrRecords(14,i)

	strHometeam = Replace(strHometeam, strLa1ID, strLa1Namn) 
	strAwayteam = Replace(strAwayteam, strLa2ID, strLa2Namn)
LarsGMedlem sedan dec. 200012 464 inlägg
#8

Du behöver två instanser av lagtabellen.

SELECT 
t.t_name, 
m.m_datum, 
m.m_matchnr, 
m.m_hometeam, 
m.m_awayteam, 
m.m_homegoals, 
m.m_awaygoals, 
m.m_ot, 
l.l_season, 
l.l_name, 
l.l_seasone,
l.l_name,
m.m_omg, 
la.ID, 
la1.lagNamn ,
la2.lagNamn
FROM  tbl_league as l
INNER JOIN tbl_team as t ON l.l_teamID = t.t_teamID
INNER JOIN tbl_matches as m ON l.l_leagueID = m.m_leagueID 
INNER JOIN tbl_lag as la1 ON la1.ID = m.m_hometeam 
INNER JOIN tbl_lag as la2 on la2.ID = m.m_awayteam
WHERE t.t_name = '"& strM &"' AND l.l_comp = '"& strC &"' AND l.l_season = '"& strSeason &"'
ORDER BY m.m_leagueID, m.m_omg, m.m_datum, m.m_matchnr
SannyWMedlem sedan jan. 2003438 inlägg
#9

Tack LarsG! Då vandrade jag på den rätta vägen...

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