Rane skrev:
> Forestiller mig at lave en top-liste a la:
>
> Spiller 1 og Spiller 2 er mest enige - de har XX kampe tippet
> ens Spiller 2 og Spiller 3 er næstmest enige - de har XX kampe
> ens osv.
>
> Hvodden får man det udskrevet i ASP?
I skal starte med at finde ud af hvordan I registrerer det. Her er
et forslag:
Først og fremmest skal I bruge en database. I skal have en tabel
over spillerne, en tabel over kampene og en tabel til jeres tip (I
kan derudover overveje at have en tabel med holdene, men det er
ikke nødvendigt til eksemplet).
Spiller:
- spillerID
- navn
Kampe:
- kampID
- holdA
- holdB
(- scoreA
- scoreB)
Tip:
- spillerID
- kampID
- scoreA
- scoreB
For at finde ens tip, kan man nu gruppere på kampID, scoreA og
scoreB i Tip:
SELECT kampID, scoreA, scoreB, COUNT(*) as antal
FROM Tip
GROUP BY kampID, scoreA, scoreB
ORDER BY COUNT(*) DESC
Man kan også kigge på hvilke spillere en given spiller er enig med:
SELECT s1.spillerID, s2.spillerID
FROM Spiller s1
INNER JOIN Tip t1
ON s1.spillerID = t1.spillerID
INNER JOIN Tip t2
ON t1.kampID = t2.kampID
AND t1.scoreA = t2.scoreA
AND t1.scoreB = t2.scoreB
AND t1.spillerID <> t2.spillerID
INNER JOIN Spiller s2
ON t2.spillerID = s2.spillerID
WHERE s1.spillerID < s2.spillerID
(hvis spiller S1 er enig med spiller S2 gælder det også den anden
vej rundt, ved at indføre WHERE-linjen, slipper vi for at vise
samme enighed begge veje)
Det kan man så gruppere, så man får antallet af sammenfald i tip-
tabellen:
SELECT s1.spillerID AS s1, s2.spillerID AS s2, COUNT(*) as antal
FROM Spiller s1
INNER JOIN Tip t1
ON s1.spillerID = t1.spillerID
INNER JOIN Tip t2
ON t1.kampID = t2.kampID
AND t1.scoreA = t2.scoreA
AND t1.scoreB = t2.scoreB
AND t1.spillerID <> t2.spillerID
INNER JOIN Spiller s2
ON t2.spillerID = s2.spillerID
WHERE s1.spillerID < s2.spillerID
GROUP BY s1.spillerID, s2.spillerID
ORDER BY COUNT(*) DESC
Det giver en liste med id-værdier på spillerne og antal "enigheder"
i faldende orden. Skal man have navnene på, kan de tilføjes i
select-linjen samt i group by-linjen:
SELECT s1.spillerID AS s1,
s1.navn AS s1navn,
s2.spillerID AS s2,
s2.navn AS s2navn,
COUNT(*) as antal
FROM Spiller s1
INNER JOIN Tip t1
ON s1.spillerID = t1.spillerID
INNER JOIN Tip t2
ON t1.kampID = t2.kampID
AND t1.scoreA = t2.scoreA
AND t1.scoreB = t2.scoreB
AND t1.spillerID <> t2.spillerID
INNER JOIN Spiller s2
ON t2.spillerID = s2.spillerID
WHERE s1.spillerID < s2.spillerID
GROUP BY s1.spillerID, s1.navn, s2.spillerID, s2.navn
ORDER BY COUNT(*) DESC
Ovenstående er helt og aldeles utestet.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på
http://usenet.dk/netikette/citatteknik.html