Avatar billede yamino Nybegynder
21. marts 2006 - 17:05 Der er 8 kommentarer og
1 løsning

Databaseudtræk

Hey alle.

Jeg har fundet et stykke kode som gør præcis det jeg skal bruge, men da jeg ikke er super stiv i PHP, tænkte jeg om der er nogen der var friske på en opgave:

Jeg har en tabel kaldet teams. team_id og team_nick indgår. Koden i sig selv tager antal teams, blander et kampprogram så alle spiller mod alle. Det jeg vil have en af jer til, er at ændre i koden, sådan at den vil trække holdende ud fra min database, og generere et kampprogram udfra disse data.

Nogen friske? :)


y^

---------------------------------------

<?php

mysql_connect ("192.168.1.105","root","bussemand");
mysql_select_db ("league");
$query = mysql_query("SELECT * FROM teams WHERE team_division = 1");
while ($data = mysql_fetch_array($query)){
};

function main() {
    // Find out how many teams we want fixtures for.

    $teams = 6;

    // If odd number of teams add a "ghost".
    $ghost = false;
    if ($teams % 2 == 1) {
        $teams++;
        $ghost = true;
    }
   
    // Generate the fixtures using the cyclic algorithm.
    $totalRounds = $teams - 1;
    $matchesPerRound = $teams / 2;
    $rounds = array();
    for ($i = 0; $i < $totalRounds; $i++) {
        $rounds[$i] = array();
    }
 
    for ($round = 0; $round < $totalRounds; $round++) {
        for ($match = 0; $match < $matchesPerRound; $match++) {
            $home = ($round + $match) % ($teams - 1);
            $away = ($teams - 1 - $match + $round) % ($teams - 1);
            // Last team stays in the same place while the others
            // rotate around it.
            if ($match == 0) {
                $away = $teams - 1;
            }
            $rounds[$round][$match] = ($home + 1) . " v " . ($away + 1);
        }
    }

    // Interleave so that home and away games are fairly evenly dispersed.
    $interleaved = array();
    for ($i = 0; $i < $totalRounds; $i++) {
        $interleaved[$i] = array();
    }
   
    $evn = 0;
    $odd = ($teams / 2);
    for ($i = 0; $i < sizeof($rounds); $i++) {
        if ($i % 2 == 0) {
            $interleaved[$i] = $rounds[$evn++];
        } else {
            $interleaved[$i] = $rounds[$odd++];
        }
    }

    $rounds = $interleaved;

    // Last team can't be away for every game so flip them
    // to home on odd rounds.
    for ($round = 0; $round < sizeof($rounds); $round++) {
        if ($round % 2 == 1) {
            $rounds[$round][0] = flip($rounds[$round][0]);
        }
    }
   
    // Display the fixtures       
    for ($i = 0; $i < sizeof($rounds); $i++) {
        print "<p>Round " . ($i + 1) . "</p>\n";
        foreach ($rounds[$i] as $r) {
            print $r . "<br />";
        }
        print "<br />";
    }
    print "<br />";
   
    if ($ghost) {
        print "Kampe imod " . $teams . " er nulkampe.";
    }
   
    print ("<p>Spejlbillede for anden kamp mod samme hold.</p>");
}


function flip($match) {
    $components = split(' v ', $match);
    return $components[1] . " v " . $components[0];
}

main();

?>
Avatar billede jakobdo Ekspert
22. marts 2006 - 07:55 #1
Nu har jeg ikke lige kigget hele koden igennem, men antal hold sættes jo her:

$teams = 6;

Det skal du så sætte ud fra din db:

$antal = mysql_result(mysql_query("SELECT COUNT(id) FROM teams WHERE team_division = 1"));

Og så sætte $teams = $antal;
Hvor den lige sætter navnene på, har jeg ikke læst mig frem til endnu! :o)
Avatar billede yamino Nybegynder
22. marts 2006 - 15:26 #2
Så meget fandt jeg ud af, det var nu mere hvordan jeg rettede det til så jeg fik holdnavne på istedet for tal.
Avatar billede yamino Nybegynder
22. marts 2006 - 16:50 #3
Fandt en løsning, ellers tak for hjælpen.
Avatar billede jakobdo Ekspert
22. marts 2006 - 16:53 #4
Fik det også til at virke: http://www.codebreaker.dk/exp/696996.php
Avatar billede yamino Nybegynder
22. marts 2006 - 19:22 #5
Men den kode udskriver jo ikke holdnavne, men holder sig stadig ved tallene.
Avatar billede jakobdo Ekspert
22. marts 2006 - 19:23 #6
Det gør den da ikke!
Holdene putter du bare ind i arrayet:
$teams = array("Hold1","Hold2","Hold3","Hold4","Hold5","Hold6","Hold7");
Avatar billede yamino Nybegynder
22. marts 2006 - 20:12 #7
A'hva?

Hvordan har du sat SQL kaldet?
Avatar billede yamino Nybegynder
22. marts 2006 - 20:21 #8
Det er jo meningen at det skal være dynamisk
Avatar billede jakobdo Ekspert
22. marts 2006 - 20:57 #9
I stedet for $teams = array(....);
så laver du:

mysql_connect ("192.168.1.105","root","bussemand");
mysql_select_db ("league");
$teams = array();
$query = mysql_query("SELECT * FROM teams WHERE team_division = 1");
if(mysql_num_rows($query)>0)
{
while ($data = mysql_fetch_assoc($query))
{
$teams[] = $data['holdnavn'];
}
}

og så main($teams);
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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