Olen tehnyt kaksi taulukkoa SQL kantaan.
table veikkaus, jossa kentät: osallisuja,aikaajot,1Sija...8Sija
table tulokset, jossa kentät:
aikaajot,1Sija...8Sija
Nyt pitäisi saada tehtyä kysely joka vertaa tulokset taulun kenttiä veikkaus taulu´n kenttiin ja jos esim.1Sija on oikein veikkaus taulussa niin kysely poimii osallistujan nimen ketä on veikannut oikein ja lisää pisteitä oikein veikatusta sijasta.
Tässä on koodi mihin olen yrittänyt tehdä kaikenlaisiakyselyjä onnistumatta siinä.
if(isset($_POST['hae'])) { $haku=mysql_query("SELECT * FROM tulokset WHERE GP = '$GP'"); $lkm=mysql_num_rows($haku); print "Tulos rivejä on: $lkm<br><br><br>"; echo "<table border>"; echo "<tr><td><b>Aika-ajot</b></td><td><b>1 Sija</b></td><td><b>2 Sija</b></td><td><b>3 Sija</b></td><td><b>4 Sija</b></td><td><b>5 Sija</b></td><td><b>6 Sija</b></td><td><b>7 Sija</b></td><td><b>8 Sija</b></td></tr>"; for ($i = 0; $i < mysql_num_rows($haku); $i++) { $aika = mysql_result($haku, $i, "aikaajot"); $a = mysql_result($haku, $i, "1Sija"); $b = mysql_result($haku, $i, "2Sija"); $c = mysql_result($haku, $i, "3Sija"); $d = mysql_result($haku, $i, "4Sija"); $e = mysql_result($haku, $i, "5Sija"); $f = mysql_result($haku, $i, "6Sija"); $g = mysql_result($haku, $i, "7Sija"); $h = mysql_result($haku, $i, "8Sija"); echo "<tr> <td>$aika</td> <td>$a</td> <td>$b</td> <td>$c</td> <td>$d</td> <td>$e</td> <td>$f</td> <td>$g</td> <td>$h</td> </tr>"; } echo "</table>";
Suomeksi:
- jos 'tulokset' taulun sija1 on sama kuin 'veikkaus' taulun sija1
- poimi nimi
- muuten
- tee jotain
Eli teet haun kummastakin taulusta, luot sijatuloksille muuttujat ja vertaat niitä, jos näin haluat asian toteuttaa.
Mihin kohtaan kyselyä tulee osallistujan poimiminen? Heitä esimerkki kyselystä.
KuinKala kirjoitti:
...jos näin haluat asian toteuttaa.
Onko sinulla joku järkevämpi ratkaisu tuon toteuttamiseksi?
Jos eri sijoitukset ovat eri kentissää on niiden vertailu vähän tuskallista etenkin, jos haluat antaa pisteitä myös niille, jotka esimerkiksi arvasivat yhden sijan väärin.
Itse tekisin tämän niin, että jakaisin tuon yhteden tietokanta rivin kahdeksaan (tai yhdeksään jos aika-ajo on mukana) eri riviin, jossa sijoitus on yksi kenttä.
Eli
Table veikkaus(GP, osallistuja, bool aika-ajo, kuski, sijoitus);
Table tulos(GP, bool aika-ajo, kuski, sijoitus);
Noissa tauluissa aika-ajo olisi vain boolean, jolla kerrotaan, että kyseinen rivi on aika-ajo veikkaus tai sijoitus. Tietenkin aika-ajoja varten voisi tehdä oman taulunkin.
Tästä pystyy nyt helposti hakemaan rivit, jotka ansaitsevat pisteitä.
SELECT V.osallistuja, V.aika-ajo, V.kuski, V.sijoitus, T.sijoitus FROM veikkaus V, tulos T WHERE V.GP = $GP AND T.GP = $GP AND V.kuski = T.kuski AND V.aika-ajo = T.aika-ajo AND ABS(T.sijoitus - V.sijoitus) < 2 SORT BY V.osallistuja
ABS() < 2 on tuossa vain esimerkki, joka huomioi yhden sijan väärin arvatus veikkaukset. Koko lauseen voi oikeastaan jättää pois ja jättää sijoitusten vertailun PHP:n tehtäväksi.
PHP:n puolella voi sitten laskea pisteitä vertailemalla yksittäisten veikkaisten veikattuja sijoituksia ja oikeita sijoituksia. Pistemäärää lasketaan niin kauan yhdelle veikkaajalle kuin osallistuja kenttä pysyy samana.
Aihe on jo aika vanha, joten et voi enää vastata siihen.