26. oktober 2004 - 14:23Der er
21 kommentarer og 1 løsning
Den hyppiste del af arrayet ?
Hejsa
Jeg har lavet et array der hedder arrMembers, jeg vil så sammenligne hvert enkelt inlæg i arrayet med nogle coloner i en bestemt tabel. Det går desværre ik så godt :/ jeg vil sammenligne, og se hvilken member i arrayet der går igen flest gange. jeg har forsøgt mig med følgene: <% ' Databaseforbindelse %> <!--#INCLUDE FILE="db.asp"--> <% ' SQL forespørgsel strSQL = "Select * From members" Set rs = Conn.Execute(strSQL)
Dim memberliste, arrMembers
Do While Not rs.EOF memberliste = memberliste & ", " & rs("nick") & "" rs.movenext loop
arrMembers = Split(memberliste,",")
Conn.Close
' Databaseforbindelse %> <!--#INCLUDE FILE="db.asp"--> <% strSQL = "Select * From pcw" Set rs = Conn.Execute(strSQL) player1 = 0 player2 = 0 Do until rs.EOF = True
for t = 1 to UBound(arrMembers)
if arrMembers(t) = rs("player1") Or arrMembers(t) = rs("player2") Then if t = 1 then player1 = player1 + 1 elseif t = 2 then player2 = player2 + 1 else 'fejl 11111 player1 = 11111 end if else 'fejl 22222 player2 = 22222 end if next
rs.movenext loop Conn.Close %> Første del af scriptet virker fint nok, men ik det nedeste :/ Håber nogen ka hjælpe!
Du har en tabel members med bla. kolonnen nick. Jeg går ud fra at den er unik. jeg vil gætte på at den også har en kolonne ID der også er unik.
Du har så en tabel pcw med bla. kolonnerne player1 og player2. I de kolonner har du noteret nick for to members.
Nu vil du gerne have at vide hvor mange gange hver enkelt member findes i pcw. Du er ligeglad med om han står i player1 eller player2. Det er faktisk en slags top 10 for deltagelse du vil have.
SELECT nick, count(*) AS Antal FROM members INNER JOIN pcw ON (members.nick = pcw.player1) OR (members.nick = pcw.player2) OR (members.nick = pcw.player3) OR (members.nick = pcw.player4) OR (members.nick = pcw.player5) GROUP BY nick;
SELECT top 5 nick, count(*) AS Antal FROM members INNER JOIN pcw ON (members.nick = pcw.player1) OR (members.nick = pcw.player2) OR (members.nick = pcw.player3) OR (members.nick = pcw.player4) OR (members.nick = pcw.player5) GROUP BY nick ORDER BY count(*) DESC;
Du bruger den sådan: 'SQL forespørgsel strSQL = "SELECT top 5 nick, count(*) AS Antal FROM members INNER JOIN pcw ON(members.nick = pcw.player1) OR (members.nick = pcw.player2) OR (members.nick = pcw.player3) OR (members.nick = pcw.player4) OR (members.nick = pcw.player5) GROUP BY nick ORDER BY count(*) DESC;"
Set rs = Conn.Execute(strSQL)
Do While Not rs.EOF Response.Write(rs("nick") & "(" & rs("Antal") & "wars)<br>") rs.movenext loop
bruger access database.. har skrevet det sådan her:
<% ' Databaseforbindelse %> <!--#INCLUDE FILE="db.asp"--> <% ' SQL forespørgsel strSQL = "SELECT top 5 nick, count(*) AS Antal FROM clanmembers INNER JOIN pcw ON(members.nick = pcw.player1) OR (members.nick = pcw.player2) OR (members.nick = pcw.player3) OR (members.nick = pcw.player4) OR (members.nick = pcw.player5) GROUP BY nick ORDER BY count(*) DESC;"
Set rs = Conn.Execute(strSQL)
Do While Not rs.EOF Response.Write(rs("nick") & "(" & rs("Antal") & "wars)<br>") rs.movenext loop Conn.Close %>
får stadig fejlen :/ Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC Microsoft Access Driver] Syntax error in JOIN operation. test2.asp, line 9
Ja, men nu troede jeg jo at den hed members, ikke clanmembers. Her kommer den korte version:
strSQL = "SELECT top 5 nick, count(*) AS Antal FROM clanmembers INNER JOIN pcw ON(nick = player1) OR (nick = player2) OR (nick = player3) OR (nick = player4) OR (nick = player5) GROUP BY nick ORDER BY count(*) DESC"
Betingelsen er at der ikke er nogen kolonne der hedder nick i pcw, og ingen der hedder player1 "til" player5 i clanmembers
Hvis der er "mange" poster i databasen, og det er vel meningen, skal kolonnerne nick og player1 2 3 4 5 være indekserede, ellers bliver den for tung at hente
Men jeg går ud fra at nick er unik, så der ville det være bedst at vælge dublicates not ok (eller hvad der nu hedder på engelsk), men så SKAL de også være unikke, og alle skal have et nick.
Må jeg anbefale at du lærer lidt mere SQL? Det du havde gang i var sådan set rigtigt nok, men du hentede bare al data i databasen over i din ASP, for at loope (flere gange) gennem den.
Databaser en netop konstrueret til at udføre den slags udregninger, og det sprog de forstår er SQL.
ja nick er unik, så jeg slår dublicates til NOT der så. Og ja nok en go ide at lære lidt SQL, al min viden er fra html.dk's turitals, og det er sq ok, men meget basic. Har på fornemelsen, mange af mine andre små scripts ku forbedres en del :)
Hmmm nu ved jeg ik om du læser det her, eller må jeg jo oprette et nyt inlæg. men jeg har leget lidt videre med en udvidelse, og har kikker på www.w3schools.com for at lære lidt SQL. Men syntse ik jeg ku en løsning på det. Udvidelsen går på at, den også skal tjekk om de vandt den kamp de spillede med i. Der er nemlig 2 coloner i pcw der hedder "roundsus" og roundsthem" som man ka sammeligne ... har prøvet med følgene: strSQL = "SELECT top 5 nick, count(*) AS Antal FROM clanmembers INNER JOIN pcw ON (pcw.roundsus > pcwroundsthem) AND (clanmembers.nick = pcw.player1) OR (clanmembers.nick = pcw.player2) OR (clanmembers.nick = pcw.player3) OR (clanmembers.nick = pcw.player4) OR (clanmembers.nick = pcw.player5) GROUP BY nick ORDER BY count(*) DESC;"
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.