webForumDet fria alternativet

Räkna procent ACCESS ASP

ASP

26 svar · 2 990 visningar · startad av climber · sida 2 av 2

Frågan, av climber

Hej, Försöker förstå mig på hur jag ska kunna räkna ut procent. Följande är givet: Denna kod räknar ut hur många tävlingar en spelare spelat <% Set AntalV=Conn.Execute("Select Count() As antal From tblres Where PlayerId= '"& strpID &"' ") %> och denna kod räknar ut hur många gånger spelaren har slutat med ett resultat mellan 18 och 29 poäng <% Set AntalB = Conn.Execute("SELECT C

Läs frågan i sin helhet →
Medlem sedan dec. 2009872 inlägg
#21

Detta är roligt!
Bara så vi pratar om samma sak, låt oss reda ut begreppen:
Bangolf = minigolf?
Bana = hål?

OK, spelar ingen roll, förutom att man har inte PAR på minigolf... (vad jag vet i alla fall!!)

***
Jag tror att Vogatini menar nåt liknande som detta, men jag kan ha fel. Nu förstår jag att bygga om din databas kanske inte är prioritet nummer ett i skrivande stund, men om du gör en vettig struktur blir sajten MYCKET roligare och intressantare.

Som ny på ASP och SQL har du en hel del att sätta dig in i. Särskilt med tanke på att ditt projekt har rätt usel design (upplägg) från början. Jag menar att din vän tänkte ett steg längre än man ofta gör när han väljer att spara ID-nummer som text... Det är ju ingen förmildrande omständighet, så att säga!

Egentligen skulle du stänga hela hemsidan och göra om allt det där. Jag är benägen att lägga min röst på att du ska bygga om hela sajten och databasen före jul, i alla fall.

Annars får du dra med den där skiten i tidernas evighet och det är ju ÄNNU jobbigare än att ta sig tid att skriva om projektet.

***
Hur som haver:

[users]
intID -- räknare
strName

[bana / lane / hole] -- välj en av dom
intID -- räknare
strText
intPAR -- om det är aktuellt

[game] -- spelomgång
intID
dteCreated
intUserID

[score]
intID
dteCreated
intGameID
intBanaID

***
Nu lade jag till en ytterligare tabell, men du kan få grymt rolig statistik baserat på detta upplägget. Dessutom, du kan med minimal, eller ingen för att vara mer exakt, ansträngning få en superkul hemsida!

Du kan få månadens snabbaste spel, senaste 30 dagar, årets bästa + snabbaste omgång med mera.

Jag tänker mig att många av dina klubbkompisar har smarta telefoner och laddar in resultatet allt efter hålen de avverkar.

***
Det är viktigt att datum verkligen är datum och inte textfält som du lägger in datum i...

Så här ska det vara: (klassisk ASP + SQL)
text = enkelfjump
datum = brädgård
siffror + boolean (sant/falskt) = inget

SQL = SELECT * WHERE strName = 'Hedenhös' AND dteCreated = #2012-08-17# AND intUserID = 23 AND bolView = TRUE

Medlem sedan juni 20019 519 inlägg
#22

Lite offtopic:
@civilpolisen ett id kan vara en GUID och det är ju inte ett tal och det är unikt

Medlem sedan aug. 201216 inlägg
#23

@civilpolisen

Bangolf = Minigolf check
Bana = Hål check

Att bygga om hela sidan är inte aktuellt för tillfället eftersom föreningen diskuterar om dom ska bygga en wordpress sida istället och då får man fundera på om man ska försöka återskapa detta system i php istället.
Det är därför i nuläget enklast att bara försöka hålla detta system flytande.

Medlem sedan aug. 201216 inlägg
#24

Om jag vill räkna ihop alla AMT1-AMT18 där värdet är 1, kan man då använda sig av INNER JOIN eller GROUP BY eller hur beter man sig?
Har fortfarande lite svårt att greppa detta :(

AMT1-AMT18 ligger i tabellen tbl_res.

Har försökt på detta sätt utan att lyckas: (OBS: Har kortat ner det till AMT1-AMT4 i exemplet)

<%
   SET EttorB1 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB1 FROM tbl_res WHERE AMT1=1 AND PlayerId='"& strpID &"'")
   SET EttorB2 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB2 FROM tbl_res WHERE AMT2=1 AND PlayerId='"& strpID &"'")
   SET EttorB3 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB3 FROM tbl_res WHERE AMT3=1 AND PlayerId='"& strpID &"'")
   SET EttorB4 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB4 FROM tbl_res WHERE AMT4=1 AND PlayerId='"& strpID &"'")
   
   SET TotEttor = Conn.Execute("SELECT SUM(AntalEttorB1+AntalEttorB2+AntalEttorB3+AntalEttorB4) AS Ettor %>
<%= TotEttor("Ettor") %>

och så här

<%
   SET EttorB1 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB1 FROM tbl_res WHERE AMT1=1 AND PlayerId='"& strpID &"'")
   SET EttorB2 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB2 FROM tbl_res WHERE AMT2=1 AND PlayerId='"& strpID &"'")
   SET EttorB3 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB3 FROM tbl_res WHERE AMT3=1 AND PlayerId='"& strpID &"'")
   SET EttorB4 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB4 FROM tbl_res WHERE AMT4=1 AND PlayerId='"& strpID &"'")
   
   SET TotEttor = Conn.Execute("SELECT SUM(AntalEttorB1+AntalEttorB2+AntalEttorB3+AntalEttorB4) AS Ettor FROM tbl_res WHERE PlayerId='"& strpID &"'")
%>
<%= TotEttor("Ettor") %>

Har inte riktigt förstått hur INNER JOIN och GROUP BY är tänkt att fungera så det är lite svårt att prova då.

När det gäller INNER JOIN så tror jag mig ha förstått att det gäller när man vill lägga ihop kolumner från olika tabeller och isf är väl det fel metod?

Jag kanske är helt åt skogen fel ute när det gäller detta :p

Medlem sedan juni 20019 519 inlägg
#25

climber skrev:

Om jag vill räkna ihop alla AMT1-AMT18 där värdet är 1, kan man då använda sig av INNER JOIN eller GROUP BY eller hur beter man sig?
Har fortfarande lite svårt att greppa detta :(

AMT1-AMT18 ligger i tabellen tbl_res.

Har försökt på detta sätt utan att lyckas: (OBS: Har kortat ner det till AMT1-AMT4 i exemplet)

<%
   SET EttorB1 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB1 FROM tbl_res WHERE AMT1=1 AND PlayerId='"& strpID &"'")
   SET EttorB2 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB2 FROM tbl_res WHERE AMT2=1 AND PlayerId='"& strpID &"'")
   SET EttorB3 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB3 FROM tbl_res WHERE AMT3=1 AND PlayerId='"& strpID &"'")
   SET EttorB4 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB4 FROM tbl_res WHERE AMT4=1 AND PlayerId='"& strpID &"'")
   
   SET TotEttor = Conn.Execute("SELECT SUM(AntalEttorB1+AntalEttorB2+AntalEttorB3+AntalEttorB4) AS Ettor %>
<%= TotEttor("Ettor") %>

och så här

<%
   SET EttorB1 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB1 FROM tbl_res WHERE AMT1=1 AND PlayerId='"& strpID &"'")
   SET EttorB2 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB2 FROM tbl_res WHERE AMT2=1 AND PlayerId='"& strpID &"'")
   SET EttorB3 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB3 FROM tbl_res WHERE AMT3=1 AND PlayerId='"& strpID &"'")
   SET EttorB4 = Conn.Execute("SELECT COUNT(*) AS AntalEttorB4 FROM tbl_res WHERE AMT4=1 AND PlayerId='"& strpID &"'")
   
   SET TotEttor = Conn.Execute("SELECT SUM(AntalEttorB1+AntalEttorB2+AntalEttorB3+AntalEttorB4) AS Ettor FROM tbl_res WHERE PlayerId='"& strpID &"'")
%>
<%= TotEttor("Ettor") %>

Har inte riktigt förstått hur INNER JOIN och GROUP BY är tänkt att fungera så det är lite svårt att prova då.

När det gäller INNER JOIN så tror jag mig ha förstått att det gäller när man vill lägga ihop kolumner från olika tabeller och isf är väl det fel metod?

Jag kanske är helt åt skogen fel ute när det gäller detta :p

INNER JOIN kan hjälpa, men tror inte koden kommer bli mindre, men du skall inte jobba med ett recordset till(TotEttor) du har ju redan de recordset du har, det är bara att räkna ihop dom. Om du nu måste göra så som du har gjort varför inte då skapa en funktion som gör allt jobb till dig, är ju inte så kul att skriva samma SQL fråga om och om igen:

<%
Function GetOnce(course, playerId)
	GetOnce = Conn.Execute("SELECT COUNT(*) FROM tbl_res WHERE AMT" & course & "=1 AND PlayerId='"& playerId &"'")(0)
End Function

Dim TotalOnce 

TotalOnce = GetOnce(1, strpID) + GetOnce(2, strpID) + GetOnce(3, strpID) + GetOnce(4, strpID)

Response.Write TotalOnce

%>
Medlem sedan aug. 201216 inlägg
#26

Tack voigtann1!

Det gjorde susen :)

Medlem sedan aug. 20121 inlägg
#27

Tack voigtann1!

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)