webForumDet fria alternativet

Flera frågor i en, hur göra?

Databaser & SQL

5 svar · 376 visningar · startad av G8

Medlem sedan jan. 20011 213 inlägg
Frågan#1

Jag har två tabeller, lag och spelare

Laguppstallningar
---------------
ID
Namn
Spelare1
Spelare2
Spelare3
Spelare4
Spelare5

Spelare
---------------
ID
Namn

Det jag skulle vilja göra är att hämta ut data för varje ID nummer i laguppstallningar.spelareX = spelare.id, hur loopa igenom allt detta..

I verkligheten är det fler än 5 spelare i laguppstallningartabellen men för att göra det lite mer överskådligt så strippar jag infon lite...

	STM = "Select spelare.id AS spelareID, spelare.namn, "&_
	"spelare.position, spelare.trojnummer FROM laguppstallningar, "&_ 
	"spelare WHERE laguppstallningar.lagid = "&LagetsID&" AND  "&_
	"laguppstallningar.omg = "&Omgang&" GROUP BY spelare.position "&_
	"DESC, spelare.Namn ASC"
	set rs = Connection.Execute(STM)

MySQL version 4.1.12-standard

Medlem sedan juni 200032 967 inlägg
#2

Menar du att du har ett fält per spelare i tabellen Laguppstallningar? Ha inte det. Ha en tabell som kopplar ihop Laguppstallningar med spelare, och joina på vanligt sätt.

Medlem sedan jan. 20011 213 inlägg
#3

Hur då menar du, skapa en tabell till? Vad är fördelen?

Medlem sedan juni 20014 290 inlägg
#4

Skulle man inte kunna ha med i tabellen Spelare ha med vilket lag spelaren tillhör? Nackdelen är att en spelare då endast kan tillhöra ett lag.

Spelare
---------------
ID
Namn
LagID

Medlem sedan jan. 20011 213 inlägg
#5

Kanske inte den snyggaste lösningen, men den funkar...

Select 
spelare.id AS spelareID, spelare.namn, spelare.position, spelare.trojnummer, laguppstallningar.spelare1, laguppstallningar.spelare2 
,laguppstallningar.spelare3, laguppstallningar.spelare4
FROM 
spelare, laguppstallningar
WHERE (spelare.id = spelare1 OR spelare.id = spelare2 OR spelare.id = spelare3 OR spelare.id = spelare4) AND laguppstallningar.lagid = 1 AND laguppstallningar.omg = 1
GROUP BY 
spelare.position DESC, spelare.Namn ASC

Har du ett bättre förslag sn@beln?

Medlem sedan juni 200032 967 inlägg
#6

Har du ett bättre förslag sn@beln?

Ja, det tycker jag.

lag
-------------------
id
namn

spelare
-------------------
id
namn
position

lagspelare
-------------------
lagid
spelarid

SELECT lag.id, lag.namn, spelare.id, spelare.namn, spelare.position
FROM lag 
INNER JOIN lagspelare ON lag.id = lagspelare.lagid
INNER JOIN spelare ON lagspelare.spelarid = spelare.id
ORDER BY spelare.position DESC, spelare.namn

Jag hoppas du ser fördelen i att inte bygga sina tabeller i sidled, så man måste förändra tabellstrukturen för att tillföra mer data.

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)