Avatar billede Flim79 Nybegynder
01. oktober 2010 - 08:16 Der er 8 kommentarer

Finde indbyrdes opgør...?

Hejsa.

Jeg har ca. 100 rækker i noget mysql-database.
Hver række består af en kamp hvor 2 spillere har mødt hinanden. I hver række står derfor spiller 1 og spiller 2.

Spiller 1 er altid den der udfordrer den anden til kamp.

Jeg vil gerne vide hvilke 2 spillere der har haft flest indbyrdes opgør.

Dvs er spiller 1 id4, og spiller 2 id7, tæller det også på samme måde som hvis spiller 1 har id7 og spiller 2 har id4.

Hvordan dælen får jeg vist hvilke 2 spillere der har mødt hinanden flest gange?

Jeg havde tænkt på noget array, men ved ikke helt hvordan jeg kommer igang.

Kan I hjælpe??
Avatar billede Slettet bruger
01. oktober 2010 - 10:30 #1
Hvordan ser bruger-id'erne ud?

Jeg tænker på om man kan "lave et produkt" af dem.
- ens uanset rækkefølgen  (4 * 5 = 4 * 5)
- og samtidig unikt for ethvert spillerpar...

Altså for at kunne trække resultatet direkte ud af mySql med én SELECT..
Avatar billede Flim79 Nybegynder
01. oktober 2010 - 11:00 #2
Id'erne er bare tal fra 1 - 22.

Idee'n er god, men den holder desværre bare ikke.

Da 1 * 6 og 2 * 3 giver samme resultat.

Eller kan den løses?
Avatar billede Slettet bruger
01. oktober 2010 - 11:56 #3
De ER da i det mindste tal - det er godt..

Jo, denne her giver unikke produkter: ((a*1000) * (b*1000) - (a+b))
- optil de 100 jeg testede (temmelig langsom test)


Test script
<script>
var produkter = new Array()
var faktorer = new Array()
var fails = 0
for (i=1;i<=22;i++)
    for (n=1;n<=22;n++)
        if (i!=n)
            {
            produkt = ( (i*1000) * (n*1000))-(n+i)
//            document.write(" par: "+i+" "+n+" = "+produkt+"<br>")

            matches = 0
            for (x=0;x<produkter.length;x++)
                if (produkt == produkter[x])
                    if (++matches > 1)
                        document.write("Fail:"+(++fails)+" ("+i+" , "+n+") = "+produkt+" = "+faktorer[x]+"<br>")

            produkter.push(produkt)
            faktorer.push("("+i+" , "+n+")")
            }
document.write("fails: "+fails)
</script>


Men hvordan du udnytter dette i en SELECT er jeg lidt usikker på....
SELECT a,b,(a*1000*b*1000-(a+b)) as produkt FROM kampe WHERE ?

count(produkt) måske og order by ...
- men sådan at man kan se hvilke a og b der er tale om...
Avatar billede showsource Seniormester
03. oktober 2010 - 09:03 #4
Måske noget a'la:


$sql = "SELECT COUNT(t1.id) as fights, t2.navn as playerone, t3.navn as playertwo
        FROM kampe as t1, kampnavn as t2, kampnavn as t3
        WHERE
        t2.id = t1.felt_1 AND t3.id = t1.felt_2
        OR
        t3.id = t1.felt_1 AND t2.id = t1.felt_2
        GROUP BY playerone, playertwo ORDER BY fights DESC LIMIT 1";

hvor tabel "kampe" er kampene, og "kampnavn" har id og navn

Men hvis nu to par spillere har mødt hinanden lige mange gange ?
Avatar billede showsource Seniormester
03. oktober 2010 - 13:46 #5
Hvis man i tabellen kampe også har to datetime felter, start og slut, kunne man f.eks. "ORDER BY fights, slut"
Også for at få flere sorterings muligeheder ?
Avatar billede showsource Seniormester
06. oktober 2010 - 20:41 #6
Fundet ud af noget ?
Avatar billede Flim79 Nybegynder
18. juni 2014 - 10:52 #7
Svarer du?
Avatar billede showsource Seniormester
29. juni 2014 - 19:35 #8
Hvem ?
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

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