Avatar billede hvisle Nybegynder
26. oktober 2004 - 14:23 Der 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!
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 14:49 #1
Jeg tror du skal lave det anderledes. Hør her:

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.

er det nogenlunde rigtigt forstået?
Avatar billede hvisle Nybegynder
26. oktober 2004 - 15:00 #2
fuldstændig rigtigt.
Og i virkeligheden har jeg faktisk oprettet 5 felter med "player1" til "player5"
Da det er 5 der spiller af gangen...
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 15:23 #3
Prøv denne:

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;
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 15:24 #4
Den har den svaghed at nick's der slet ikke er med ikke kommer med i resultatet.
Avatar billede hvisle Nybegynder
26. oktober 2004 - 15:33 #5
Jeg er ik helt med på, hvordan jeg skal få fat i navnene ...
Avatar billede hvisle Nybegynder
26. oktober 2004 - 15:41 #6
ville ha det skulle ende med Fx: krigeren(33wars), slagteren(31wars), o.s.v
Altså en top 5 på den måde...

fik iøvrigt en fejl: Syntax error in JOIN operation.
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 15:53 #7
Hvilken database bruger du?

Denne virker i Access og i MSSQL

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
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 15:54 #8
Har nick og de 5 player-felter HELT samme datatype?
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 15:55 #9
Sorry: prøv lige at slette det ; sidst i SQL'en (efter DESC)
Avatar billede hvisle Nybegynder
26. oktober 2004 - 15:59 #10
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
%>
Avatar billede hvisle Nybegynder
26. oktober 2004 - 16:01 #11
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
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 16:02 #12
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
Avatar billede hvisle Nybegynder
26. oktober 2004 - 16:03 #13
sorry min fejl, havde jo rettet tabellen members til clanmambers :)
Avatar billede hvisle Nybegynder
26. oktober 2004 - 16:05 #14
anyways ku man få det så navnene stod efter hinnanden, istedet for under ?
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 16:06 #15
helt ok. Men nu tror jeg efterhånden på den.

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
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 16:08 #16
Ja, se hvad det er jeg har skrevet. Jeg har lavet et <br> for hver post, du kan jo bare lave noget andet.

Men det lyder som om at det virker ?+ :o)
Avatar billede hvisle Nybegynder
26. oktober 2004 - 16:10 #17
Ja det virker nice, tusind tak for hjælpen !
Der under indexed skal jeg så vælge "YES (Dublicates OK)" ?
Avatar billede hvisle Nybegynder
26. oktober 2004 - 16:14 #18
iøvrigt vildt at det lange script ku blive så kort hehe :)
Avatar billede ldanielsen Nybegynder
26. oktober 2004 - 16:16 #19
Ja, for players.

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.
Avatar billede hvisle Nybegynder
26. oktober 2004 - 16:32 #20
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 :)
Avatar billede hvisle Nybegynder
27. oktober 2004 - 16:59 #21
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;"

Men virker desværre ikke :(
Avatar billede hvisle Nybegynder
27. oktober 2004 - 17:15 #22
ahhh fandt sq ud af det selv, nice :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester