webForumDet fria alternativet

SQL på alla poster istf på en

Databaser & SQLur Databashanterare & SQL

8 svar · 211 visningar · startad av lillen_009

lillen_009Medlem sedan nov. 2002137 inlägg
#1

Problemet:

har en sida i ASP mot MySQL databas. Den räknar en hel del siffror från databasen och resultatet visas som det ska. Nu är det så att jag definierat värden på det som ska räknas i databasen direkt i SQL-satsen. Jag skulle vilja upprepa min kod på alla poster som ligger i en annan tabell med just alla namn.

Jag vet - krånglig förklaring...

Just nu, tex:

SQL = "SELECT COUNT(*) As kryss FROM games where HomeTeam='LagX' AND HomePoint='1'"
Set RS = Connect.Execute(SQL)

- - -

I andra tabellen, teams, ligger alla lagnamn (LagA, LagB, LagX, mfl). Hur kan jag ändra min kod (SQL) så att den upprepar SQL:en för alla poster i teams.

Skriv gärna om ni har fler funderingar eller om ni inte förstår vad jag menar. Förklarar mer än gärna lite bättre (om det går)

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select t.teamname,count(*) as kryss
from games g join teams t
 on g.hometeam = t.teamname
group by t.teamname
lillen_009Medlem sedan nov. 2002137 inlägg
#3

Forts

Tack för svaret. Var/hur får jag in homepoint='1' ? Det måste vara med så det är en förutsättning för att allt ska räknas rätt

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Den glömde jag

select t.teamname,count(*) as kryss
from games g join teams t
 on g.hometeam = t.teamname
where HomePoint='1'
group by t.teamname
lillen_009Medlem sedan nov. 2002137 inlägg
#5

Fungerar inte...

Vet inte om jag gjort fel, men jag använde ovanstående kod. Fick följande felmeddelande:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E09)
[TCX][MyODBC]You have an error in your SQL syntax near 'on g.hometeam = t.name group by t.name' at line 1
/tabell/tabell.asp, line 18

Vad kan vara fel? Skall man skriva ut resultatet på något speciellt sätt? Använder ASP/MySQL

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Kan du visa din asp-kod?

lillen_009Medlem sedan nov. 2002137 inlägg
#7

Visst kan jag det, men det är ingen "riktigt skriven" kod eller rättare sagt det fungerar, men är säkert ineffektivt och onödigt krångligt. Sitter och gör en idrottstabell där jag vill få fram en tabell av enbart matchresultat.

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver=MySQL;server=localhost;uid=andreas;pwd=losen;database=tabell"
SQL = "SELECT sum(HomePoint) As hemmapoäng FROM games where HomeTeam='LagXXX'"
Set RS = Connect.Execute(SQL) %>
<body>
<%
SQL1 = "SELECT COUNT(*) As hemmamatcher FROM games where HomeTeam='LagXXX'"
Set RS1 = Connect.Execute(SQL1) %>
<%
SQL2 = "SELECT COUNT(*) As hemmavinst FROM games where HomeTeam='LagXXX' AND HomePoint='3'"
Set RS2 = Connect.Execute(SQL2) %>
<%
SQL3 = "SELECT COUNT(*) As hemmakryss FROM games where HomeTeam='LagXXX' AND HomePoint='1'"
Set RS3 = Connect.Execute(SQL3) %>
<%
SQL4 = "SELECT COUNT(*) As hemmaförlust FROM games where HomeTeam='LagXXX' AND HomePoint='0'"
Set RS4 = Connect.Execute(SQL4) %>
<%
SQL5 = "SELECT sum(HomeScore) As hemmamål FROM games where HomeTeam='LagXXX'"
Set RS5 = Connect.Execute(SQL5) %>
<%
SQL6 = "SELECT sum(AwayScore) As hemmainsläppta FROM games where HomeTeam='LagXXX'"
Set RS6 = Connect.Execute(SQL6) %>
<%
SQL7 = "SELECT COUNT(*) As bortamatcher FROM games where AwayTeam='LagXXX'"
Set RS7 = Connect.Execute(SQL7) %>
<%
SQL8 = "SELECT COUNT(*) As bortavinst FROM games where AwayTeam='LagXXX' AND AwayPoint='3'"
Set RS8 = Connect.Execute(SQL8) %>
<%
SQL9 = "SELECT COUNT(*) As bortakryss FROM games where AwayTeam='LagXXX' AND AwayPoint='1'"
Set RS9 = Connect.Execute(SQL9) %>
<%
SQL10 = "SELECT COUNT(*) As bortaförlust FROM games where AwayTeam='LagXXX' AND AwayPoint='0'"
Set RS10 = Connect.Execute(SQL10) %>
<%
SQL11 = "SELECT sum(AwayScore) As bortamål FROM games where AwayTeam='LagXXX'"
Set RS11 = Connect.Execute(SQL11) %>
<%
SQL12 = "SELECT sum(HomeScore) As bortainsläppta FROM games where AwayTeam='LagXXX'"
Set RS12 = Connect.Execute(SQL12) %>
<%
SQL13 = "SELECT sum(AwayPoint) As bortapoäng FROM games where AwayTeam='LagXXX'"
Set RS13 = Connect.Execute(SQL13) %>
<%
SQL14 = "select sum(case when HomeTeam = 'LagXXX' then homepoint when Awayteam = 'LagXXX' then AwayPoint else 0 end) as totp from games"
Set RS14 = Connect.Execute(SQL14) %>
<%
SQL15 = "select count(*) as totmatch from games where Hometeam='LagXXX' or Awayteam='LagXXX'"
Set RS15 = Connect.Execute(SQL15) %>
<%
SQL16 = "select count(*) as totwin from games where Hometeam='LagXXX' AND HomePoint='3' or Awayteam='LagXXX' AND AwayPoint='3'"
Set RS16 = Connect.Execute(SQL16) %>
<%
SQL17 = "select count(*) as totdraw from games where Hometeam='LagXXX' AND HomePoint='1' or Awayteam='LagXXX' AND AwayPoint='1'"
Set RS17 = Connect.Execute(SQL17) %>
<%
SQL18 = "select count(*) as totlose from games where Hometeam='LagXXX' AND HomePoint='0' or Awayteam='LagXXX' AND AwayPoint='0'"
Set RS18 = Connect.Execute(SQL18) %>
<%
SQL19 = "select sum(case when HomeTeam = 'LagXXX' then homescore when Awayteam = 'LagXXX' then Awayscore else 0 end) as totgjorda from games"
Set RS19 = Connect.Execute(SQL19) %>
<%
SQL20 = "select sum(case when HomeTeam = 'LagXXX' then awayscore when Awayteam = 'LagXXX' then homescore else 0 end) as totinsl from games"
Set RS20 = Connect.Execute(SQL20) %>

<br>
<table width="582">
<tr>
<td width="100" border="1">LagXXX</td>
<td width="20" border="1"><%=RS1("hemmamatcher")%></td>
<td width="20" border="1"><%=RS2("hemmavinst")%></td>
<td width="20" border="1"><%=RS3("hemmakryss")%></td>
<td width="20" border="1"><%=RS4("hemmaförlust")%></td>
<td width="60" border="1"><%=RS5("hemmamål")%> - <%=RS6("hemmainsläppta")%></td>
<td width="20" border="1"><b><%=RS("hemmapoäng")%></b></td>
<td width="1" border="1" bgcolor="#000000"></td>
<td width="20" border="1"><%=RS7("bortamatcher")%></td>
<td width="20" border="1"><%=RS8("bortavinst")%></td>
<td width="20" border="1"><%=RS9("bortakryss")%></td>
<td width="20" border="1"><%=RS10("bortaförlust")%></td>
<td width="60" border="1"><%=RS11("bortamål")%> - <%=RS12("bortainsläppta")%></td>
<td width="20" border="1"><b><%=RS13("bortapoäng")%></b></td>
<td width="1" border="1" bgcolor="#000000"></td>
<td width="20" border="1"><%=RS15("totmatch")%></td>
<td width="20" border="1"><%=RS16("totwin")%></td>
<td width="20" border="1"><%=RS17("totdraw")%></td>
<td width="20" border="1"><%=RS18("totlose")%></td>
<td width="60" border="1"><%=RS19("totgjorda")%> - <%=RS20("totinsl")%></td>
<td width="20" border="1"><b><%=RS14("totp")%></b></td>
</tr>
</table>

Jag vet att det kan verka amatörmässigt gjort, men jag vill bara få det att fungera med att detta genomförs på alla poster i tabellen teams. Fungerar som sagt som det ser ut ovan, men då får man bara fram det för ett lag:
Tabellen teams ser ut som följande:

TeamID | Name
1 LagXXX
2 LagYYY
3 LagZZZ

Tack på förhand

LarsGMedlem sedan dec. 200012 464 inlägg
#8

Jag menade enbart den kod där du använder den fråga som ger upphov till fel.

lillen_009Medlem sedan nov. 2002137 inlägg
#9

Koden

Nu kommer felmeddelandet på SQL-satsen och inte på ASP-koden. Men jag skriver bara ut resultatet med

<td width="20" border="1"><%=RS3("kryss")%></td>

Man ska väl ha med 'Do Until RS3.EOF också, eller?

Ursäkta mina dumma frågor men det är ett mycket irriterande problem.

Rad 17-18 (där felet kommer) ser ut som följande:

<%
SQL3 = "select t.name,count(*) as kryss from games g join teams t on g.hometeam = t.name where HomePoint='1' group by t.name"
Set RS3 = Connect.Execute(SQL3) %>

Räknar jag rätt kommer felet på connect.execute. Kanske inte så konstigt eftersom det är då koden från raden innan behandlas.
- - -
Felet:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E09)
[TCX][MyODBC]You have an error in your SQL syntax near 'on g.hometeam = t.name where HomePoint='1' group by t.name' at line 1

128 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)