G8Medlem sedan jan. 20011 213 inlägg 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 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 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 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 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 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