webForumDet fria alternativet

Statistik-SQL-sats

4 svar · 378 visningar · startad av Ekström

EkströmMedlem sedan feb. 20021 690 inlägg
#1

Hej,

jag driver en sida på vilken man kan tävla i olika dataspel. Har stora problem med att få till en SQL-sats. Jag vill ha ut vilket lag som vunnit flest matcher. Låter enkelt, men det är det inte. Åtminstone inte för mig. Det är uppdelat som följer:

Tabeller:
Lag1
Matcher
Lag2

I "lag" ligger alla lag sparade med ett specifikt ID. I Lag2 ligger alla lag "för en turnering". När ett lag anmäler sig till en turnering läggs en ny post till i "lag2". Det laget gäller just för den turneringen. Varje lag i "lag2" kopplas till sitt lag i "lag1". Lag kan alltså anmäla sig till och spela massor med turneringar. En post per lag ligger i "lag1". I "lag2" kan det ligga 10 olika poster kopplat till det laget, beroende på hur många turneringar de spelat. Jag hoppas åtminstone någon hänger med.

Jag vill alltså ha ut vilka som vunnit flest matcher. I tabellen "matcher" ligger fälten lagnr1 och lagnr2. Dessa lagnr är ID i "lag2".

Krav som ska uppfyllas:
lag2.lagid = lag1.id
matcher.lag2 = lag2.id (om laget är just lagnr2. Detta varierar.)
lagnr2rundor > lagnr1rundor (om laget är just lagnr2. Detta varierar.)
..och det ska alltså ordnas efter vilkas om vunnit flest matcher.

Jag tror jag hade kunnat klara av det om det alltid varit så att ett lag har matcher.lagnr1, men det kan ju variera så att det är lag2. Jag önskar jag kunde förklara det bättre, men det är rätt invecklat. Hoppas någon tar sig an det.

LarsGMedlem sedan dec. 200012 465 inlägg
#2
select lag1.namn, 
        (select count(*)
            from matcher
           where (matcher.lag1id = lag1.id and lagnr1rundor > lagnr2rundor)
              or (matcher.lag2id = lag1.id and lagnr1rundor < lagnr2rundor)) as won
    from lag1
   where id in 
   (select id
      from lag2)
   order by won desc
EkströmMedlem sedan feb. 20021 690 inlägg
#3

Mycket möjligt att det där är rätt, LarsG, men hela servern dör då jag kör frågan. :D

Någon inställning i mysql som saknas? Står på en server som helt klart borde klara en sån fråga. Det handlar inte om så jättemånga poster heller.

LarsGMedlem sedan dec. 200012 465 inlägg
#4

Titta på resultatet av explain och se om du behöver indexera något.

nisslassMedlem sedan nov. 2001371 inlägg
#5

LarsG skrev:

Titta på resultatet av explain och se om du behöver indexera något.

Vad är det exakt man bör se i resultatet?

Det vi kan se är detta:

Field Type Null Key Default Extra
cupid <MEMO> YES MUL 0
leagueid <MEMO> NO 0
omgang <MEMO> YES 0
lag1 <MEMO> YES 0
rundor1 <MEMO> YES 0
lag2 <MEMO> YES 0
rundor2 <MEMO> YES 0
id <MEMO> NO PRI <NULL> auto_increment
lb <MEMO> NO 0
groupomgang <MEMO> YES <NULL>
groupnr <MEMO> YES <NULL>
wbf <MEMO> NO 0
hltv <MEMO> YES <NULL>
hltvdal1 <MEMO> NO 0
hltvdal2 <MEMO> NO 0

Lite svårt att tyda direkt men det går. ;)

Genererad på 369 ms · cache AV · v20260730165559-full.f96bc7eb