webForumDet fria alternativet

Hjälp med SQL Query

5 svar · 308 visningar · startad av G8

G8Medlem sedan jan. 20011 213 inlägg
#1

Hej, Jag har lite problem med en SQL query som jag kör (MySQL).

Två tabeller:
KLUBBAR:
ID
Namn
regionid
poang

Regioner:
ID
Namn
Sportid
Antal_registrerade

Jag tar reda på "sport" (ett idnummer) med request.querystring och använder mig av SQL satsen:

"SELECT region.id AS regionid, region.namn AS regionnamn, region.antal_registrerade, klubbar.id AS klubbid, klubbar.namn AS klubbnamn, klubb.poang FROM regioner INNER JOIN klubbar ON klubbar.regionid = regioner.id WHERE regioner.sportid="& sport &" ORDER BY regioner.namn ASC "

Jag vill ha så att den listar alla olika resultat i Regioner och bara den klubben med högst poäng i varje region.
det ska alltså se ut nånting såhär:

Region: Ledande klubb: Poäng: Antal Registrerade:
Region1 Klubben FF 14 18
Region2 Klubben IF 26 22
Region3 IFK Klubben 12 16

För tillfället skrivs ALLA klubbarna ut istället.... Nån som ser vad som är fel?

Tacksam för svar

//G8

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Detta går inte att lösa i mysql med en fråga.

Det bästa är nog att skapa en temporärtabell med två kolumner

regionid och poäng

create temporary table t(regionid int, poang int)

insert into t 
select regionid,max(poang) 
from klubbar 
group by regionid

SELECT r.id AS regionid, r.namn AS regionnamn,
             r.antal_registrerade, k.id AS klubbid, 
             k.namn AS klubbnamn, k.poang  
  from klubbar k inner join t 
     on k.regionid = t.regiondid 
   and k.poang = t.poang
 inner join region r
     on t.regiondid = r.id

Flyttas från ASP till mysql

G8Medlem sedan jan. 20011 213 inlägg
#3

Får följande felmeddelande:

Error Type:
Microsoft VBScript compilation (0x800A0401)
Expected end of statement
tabelllista.asp, line 38, column 17
create temporary table t(regionid int, poang int)
----------------^

Nån som vet, Lars G? *hint* ;)

Tack för hjälpen

G8Medlem sedan jan. 20011 213 inlägg
#4

förresten, blir inte denna lösningen ganska processorkrävande? Finns det någon enklare lösning kanske?

Mvh

//G8

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Det är inte ASP-kod. Det är ren SQL.

connect.execcute "create temporary table t(regionid int, poang int)"

connect.execute "insert into t " &_
"select regionid,max(poang) " &_
" from klubbar " &_
" group by regionid "

set rs = connect.execute( &_
"SELECT r.id AS regionid, r.namn AS regionnamn, " &_
             "r.antal_registrerade, k.id AS klubbid, " &_
             "k.namn AS klubbnamn, k.poang  " &_
  "from klubbar k inner join t  " &_
     "on k.regionid = t.regiondid " &_
   "and k.poang = t.poang " &_
 "inner join region r " &_
     "on t.regiondid = r.id" &_
G8Medlem sedan jan. 20011 213 inlägg
#6

Hmm, testade att göra ett recordset till som ser ut som följer:

Recordset1:

stm = "SELECT regioner.id AS regionid, regioner.namn AS regionnamn, region.antal_klubbar FROM regioner WHERE regioner.sportid="& sport &" ORDER BY regioner.namn asc"
set rs1 = Connection.Execute(stm)

Recordset2: (som jag lägger efter do until rs1.eof för att få rätt regionid på varje rad)

stm2 = "SELECT klubbar.id AS klubbid, klubbar.namn AS klubbnamn, klubbar.poang FROM klubbar WHERE klubbar.regionid="& rs1("regionid") &" ORDER BY klubbar.poang desc"
set rs2 = Connection.Execute(stm2)

Jag vet inte om detta blir tyngre än att skapa en temorär tabell varje gång sidan besöks vilket kan bli ganska ofta. Någon som vet om det är tyngre att köra två recordsets än att skapa en temporär tabell?

Tack för hjälpen så här långt LarsG :)

Mvh

//G8

120 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
118 ms — hämta tråd, inlägg och bilagor (db)