/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Udfordring
Fra : Rane


Dato : 02-06-06 13:08

Heya,

vi er 21 stk der har gang i en tippe-konkurrence i forbindelse med VM
i fodbold. For hver spillerunde afgiver vi alle et resultat-tips. Så
tænkte vi at det kunne være sjovt at se hvor mange resultat-tips de
enkelte deltagere egentlig har til fælles.

Eks.

Spiller 1 tipper 0-0, 0-2, 2-1, 4-2, 1-2
Spiller 2 tipper 0-1, 0-2, 2-0, 2-1, 1-0
Spiller 3 tipper 0-0, 0-2, 2-1, 0-0, 1-1

Her kan man så se at Spiller 2 har 1 fællestips med Spiller 1. OG
Spiller 3 har 3 fællestips med Spiller 1. Spiller 3 har også kun 1
fællestips med Spiller 2.

Det ser meget nemt ud med dette eksempel, men når der er 16 kampe i en
runde og 21 deltagere...så er det pludselig knap så nemt at få
udskrevet en sorteret liste over deltager-navne der er mest enige.
Håber I forstår hensigten med det?

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?


mvh
Rene

 
 
Jens Gyldenkærne Cla~ (02-06-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 02-06-06 13:39

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

Jesper (02-06-2006)
Kommentar
Fra : Jesper


Dato : 02-06-06 21:47


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns97D6951B73D55jcdmfdk@gyrosmod.dtext.news.tele.dk...
> 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).

Ganske alm. matematik hehe

Jesper.



Rene (02-06-2006)
Kommentar
Fra : Rene


Dato : 02-06-06 23:10

On Fri, 02 Jun 2006 14:39:28 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:

>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

Daaamn det var da noget af en SQL-sætning. Det havde jeg aldrig fundet
ud af...jeg tester den lige engang i weekenden og vender tilbage.

på forhånd mange tak

Rene

Rene (02-06-2006)
Kommentar
Fra : Rene


Dato : 02-06-06 23:39

On Fri, 02 Jun 2006 14:39:28 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:
>
>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

Får følgende fejl jeg ikke helt kan gennemskue?

Error Type:
Microsoft JET Database Engine (0x80040E14)
Syntax error (missing operator) in query expression 's1.spillerID =
t1.spillerID INNER JOIN Tip t2 ON t1.kampID = t2.kampID'.
/odds/runde1.asp, line 18

Jens Gyldenkærne Cla~ (03-06-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-06-06 10:01

Rene skrev:

> Får følgende fejl jeg ikke helt kan gennemskue?
>
> Error Type:
> Microsoft JET Database Engine (0x80040E14)
> Syntax error (missing operator) in query expression
> 's1.spillerID = t1.spillerID INNER JOIN Tip t2 ON t1.kampID =
> t2.kampID'. /odds/runde1.asp, line 18

Argh - jeg havde glemt at Access ikke kan lide flerleddede joins
uden paranteser. SQL Server - som jeg arbejder med til daglig - har
ingen problemer med den slags. For at få det til at virke, skal man
indkapsle joins i paranteser efter skabelonen:

SELECT t FROM foo INNER JOIN (bar INNER JOIN (baz INNER JOIN ...


Følgende virker i Access (og MSSQL):

SELECT   s1.spillerID AS s1,
      s1.navn AS s1Navn,
      s2.spillerID AS s2,
      s2.navn AS s2Navn,
      Count(s2.spillerID) AS Antal
FROM spillere AS s2 INNER JOIN
   ((spillere AS s1 INNER JOIN tip AS t1
      ON s1.spillerID = t1.spillerID)
   INNER JOIN tip AS t2
      ON (t1.scoreB = t2.scoreB)
      AND (t1.scoreA = t2.scoreA)
      AND (t1.kampID = t2.kampID)
       AND (t1.spillerID <> t2.spillerID))
   ON s2.spillerID = t2.spillerID
WHERE s1.spillerID < s2.spillerID
GROUP BY s1.spillerID, s1.navn, s2.spillerID, s2.navn

Det er i mine øjne ikke nær så let at læse, men den virker også i
Access.
--
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

Rene (03-06-2006)
Kommentar
Fra : Rene


Dato : 03-06-06 13:15

On Sat, 03 Jun 2006 11:00:48 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:

>Argh - jeg havde glemt at Access ikke kan lide flerleddede joins
>uden paranteser. SQL Server - som jeg arbejder med til daglig - har
>ingen problemer med den slags. For at få det til at virke, skal man
>indkapsle joins i paranteser efter skabelonen:
>
>SELECT t FROM foo INNER JOIN (bar INNER JOIN (baz INNER JOIN ...

Jep det virkede

Er det avanceret at lave et skema udfra den SQL?

(Altså et skema hvor alle navne figurerer både vandret og lodret og
hvor man så i de enkelte kasser kan se hvor mange fællestips 2 navne
har)

Takker

Rene

Peter Lykkegaard (05-06-2006)
Kommentar
Fra : Peter Lykkegaard


Dato : 05-06-06 16:36

Rene wrote:

> Er det avanceret at lave et skema udfra den SQL?
>
Ikke i Access :)
Gem den select statement Jens bryggede sammen som en query i Access og brug
efterfølgende transform/pivot

Lidt intro til herligheden:
http://www.blueclaw-db.com/accessquerysql/pivot_query.htm
http://www.databasejournal.com/features/mssql/article.php/3516331

Se til hvis du skal have mere info/hjælp .)

- Peter

--
Hi! I'm a .signature *virus*!
Copy me into your ~/.signature to help me spread!



Rane (08-06-2006)
Kommentar
Fra : Rane


Dato : 08-06-06 07:11

On Mon, 5 Jun 2006 17:36:19 +0200, "Peter Lykkegaard"
<plykkegaard@gmail.com> wrote:

>Ikke i Access :)
>Gem den select statement Jens bryggede sammen som en query i Access og brug
>efterfølgende transform/pivot
>
>Lidt intro til herligheden:
>http://www.blueclaw-db.com/accessquerysql/pivot_query.htm
>http://www.databasejournal.com/features/mssql/article.php/3516331
>
>Se til hvis du skal have mere info/hjælp .)

Det virker som sådan OK i access, endda uden at gå manuelt ind og
ændre i SQL'en men bare ved at vælge Pivot-tabelvisning i Access.

Dog placerer den kun Spiller1 i én række - han figurerer ikke i den
anden række sjovt nok. Måske fordi at hans navn starter med A og
dermed er den første der sorteres efter i SQL'en.

Eks.

Kolonner: Allan, Bent, Palle, Søren osv.
Rækker: Bent, Palle, Søren osv.

Dvs. jeg kommer til at mangle en vandret række med Allans navn i. :(

Jens Gyldenkærne Cla~ (03-06-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 03-06-06 22:26

Rene skrev:

> Er det avanceret at lave et skema udfra den SQL?

Bob bob - det kommer vel an på hvem der skal lave det . Men det
er ikke nogen simpel opgave.


> (Altså et skema hvor alle navne figurerer både vandret og
> lodret og hvor man så i de enkelte kasser kan se hvor mange
> fællestips 2 navne har)

Der er to delopgaver. Dels skal sql-sætningen ændres så du får vist
alle spillerkombinationer (også dem uden fællestip) - og dels skal
du håndtere udskrivningen af en NxN-matrix ud fra et datasæt.

Til den første del kan du benytte dig af kartesiske produkt for at
danne samtlige kombinationer:

   SELECT * FROM spillere s1, spillere s2

Til den anden del bør du gemme postsættet i et
flerdimensionelt array - det gør det let at navigere frem og
tilbage i det.

Jeg kan ikke hjælpe med en færdig løsning her - det er ikke helt
simpelt at lave.
--
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

Rene (05-06-2006)
Kommentar
Fra : Rene


Dato : 05-06-06 15:34

On Sat, 03 Jun 2006 23:26:13 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:

>Jeg kan ikke hjælpe med en færdig løsning her - det er ikke helt
>simpelt at lave.

Tror også det bliver for avanceret for mig.

Iøvrigt...den foregående lange SQL-sætning...kan den ikke udskrive de
records/person der har 0 tips til fælles også?

peter.aghl@gmail.com (09-06-2006)
Kommentar
Fra : peter.aghl@gmail.com


Dato : 09-06-06 13:02


Rane skrev:

> Det virker som sådan OK i access, endda uden at gå manuelt ind og
> ændre i SQL'en men bare ved at vælge Pivot-tabelvisning i Access.
>
> Dog placerer den kun Spiller1 i én række - han figurerer ikke i den
> anden række sjovt nok. Måske fordi at hans navn starter med A og
> dermed er den første der sorteres efter i SQL'en.
>
> Eks.
>
> Kolonner: Allan, Bent, Palle, Søren osv.
> Rækker: Bent, Palle, Søren osv.
>
> Dvs. jeg kommer til at mangle en vandret række med Allans navn i. :(

Hmm, hvordan ser den endelige SQL ud?
Husk at du kan angive antal kolonner /kolonne navne efter PIVOT

eg
SELECT *
FROM #sales
PIVOT
(
SUM(Amount)
FOR Quarter
IN (Q1, Q2, Q3, Q4)
)
AS p

Q1, Q2, Q3, Q4 kan være en select statement i stedet

Du kan evt sende nogle table scripts samt data til mig per email - min
email er valid

- Peter


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste