24. marts 2006 - 06:22Der er
7 kommentarer og 1 løsning
Join mellem 3 tabeller
Join mellem 3 tabeller 30 point fra steka
X 3 aftener og jeg må give op.
Jeg har 3 tabeller
1) vis double: indeholder een række med summen af de to spilleres resultat, nøgle hold nummer. 2) players: indeholder alle spillere (hold nummer findes) 3) results: indeholder alle resultater spillerne har præsteret (hold nummer findes)
nøgle mellem players og results er spiller nummer.
Hvordan pokker joiner jeg så resultatet på skærmen er:
Hold 1 Spiller 1 .....resultat .... placering Hold 1 Spiller 2 .....resultat .... (placering) Hold 2 Spiller 1 .....resultat .... placering osv.
Jeg har forsøgt mig med:
$sql = mysql_query("SELECT DISTINCT * FROM players, results right join visdouble on felt1=results.rteam WHERE players.pno = results.rno and results.sdt like 'double' and players.group LIKE '$_GET[kon]%' ORDER BY felt2 desc, felt3 desc, total desc , pins DESC, visdouble.id ASC ") or die(mysql_error());
[kon] dækker over hvilken gruppe den enkelte spiller deltager i.
Kan måske klares ved at indsætte holdets resultat i results, men synes det kunne være lækkert (og lærerigt) at bruge join muligheden.
AI bliver først for alvor en del af arbejdet, når teknologien integreres i den måde, vi arbejder på. At have adgang til AI betyder ikke nødvendigvis, at medarbejderne er klar til at bruge den.
Mit problem opstår ved felt1 dteam rteam fordi en spiller i en lavere række altid spiller sammen med den spiller der er placeret i den højeste række blandt holdets spillere.
tabel: visdouble Dannes ved sidens åbning og indeholder summen holdets score
*1* felt1 varchar(4) holdnr felt2 int(11) sum score felt3 int(11) sum score+hcp id mediumint(9) indsættes efter create til at danne placering
tabel: players
*2* pno mediumint(9) spiller nummer name varchar(100) group varchar(10) phcp smallint(2) handicap *1* dteam varchar(4) holdnr (*1*) tteam varchar(4) holdnr (benyttes i anden diciplin)
Indekser : pno
tabel: results
plac mediumint(4) *2* rno mediumint(6) spiller nummer sdt varchar(6) diciplin rhcp mediumint(3) handicap mhcp smallint(3) handicap *1* rteam varchar(4) holdnr
+ INFOrækker
Indekser : rno
Herunder mit foreløbige resultat, men disse spillere tilhører alle samme række.
Plac Team Name Country Group Event HCP S1 S2 S3 S4 S5 S6 PINS ∑HCP TOT X / 1 d3 Ritva Lieto Finland Ladies C Double 12 0 0 0 0 0 0 0 72 0 0 0 156 0 1 d3 Kirsti Nurmela Finland Ladies C Double 14 0 0 0 0 0 0 0 84 0 0 0 156 0 2 D1 Leida Zwep Netherlands Ladies C Double 7 0 0 0 0 0 0 0 42 0 0 0 132 0 2 D1 Nel Buis Netherlands Ladies C Double 15 0 0 0 0 0 0 0 90 0 0 0 132 0 3 D2 Jos Hurenkamp Netherlands Ladies C Double 4 0 0 0 0 0 0 0 24 0 0 0 72 0 3 D2 Joke Gerwen Netherlands Ladies C Double 8 0 0 0 0 0 0 0 48 0 0 0 72 0
dteam er hold nummer i players tabellen rteam er hold nummer i results tabellen felt1 er dteam i visdouble efter denne select: INSERT INTO visdouble SELECT distinct dteam, sum(s1+s2+s3+s4+s5+s6+sumhcp)/2,sum(s1+s2+s3+s4+s5+s6)/2 FROM players, results WHERE dteam=rteam and dteam <> \"\" and substring(dteam,1,2) = '$gruppend' AND players.group LIKE '$_GET[kon]%' group by players.dteam
Havde fået det til at virke ved at indsætte en ekstra tabel, men var noget urolig for performance/stabilitet når der skulle oprettes og opdateres to tabeller ved hver forespørgsel.
kon=køn
hvorefter din join ikke behøver en WHERE sætning ved søgning på land indsætter jeg så bare WHERE land = X.
Læser din join derhen: Vælg alle spillere som er i players og results og af dem vælg de spillere som er i visdouble. Hvorfor sætter du egentlig paranteser omkring betingelserne?
visdouble kunne måske gøres mere elegant - men det virker.
Læser din join derhen: Vælg alle spillere som er i players og results og af dem vælg de spillere som er i visdouble.
Ja det er korrekt.
Hvorfor sætter du egentlig paranteser omkring betingelserne?
hmm ja jo det er vist et godt spørgsmål, de er er ikke nødvendige i det tilfælde.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.