webForumDet fria alternativet
Logga in / Bli medlem

Join i flera steg

Databaser & SQL

8 svar · 482 visningar · startad av SannyW

Medlem sedan jan. 2003438 inlägg
Trådstart#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.

Medlem sedan juni 200032 967 inlägg
Medlem 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

Medlem sedan juni 200032 967 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. =)

Medlem 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"
Medlem 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)
Medlem 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)
Medlem 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
Medlem sedan jan. 2003438 inlägg
#9

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

517 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
372 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
372 ms — ändringar (db)