Avatar billede zips Juniormester
28. marts 2008 - 00:59 Der er 16 kommentarer og
1 løsning

Placering udfra point

Hej Eksperter

Hvordan får jeg dette til at skrive placering ud, ja ja det gør det, men vil godt have at, hvis der er nogle som har samme point skal de have samme placering, som her under.
---------------------------
Plads --- Navn --- Point
  1      Hans      118
  2      Jens      115
  2      John      115
  3      Finn      112
---------------------------
Mit script ser sådan her ud

<?php
    $i = 1;
    $get_horses = mysql_query("SELECT horse_type, disciplin_id, year, horse_id AS horse_id, SUM( point ) AS point
FROM rl_competition
WHERE year = '$_GET[aar]'
AND disciplin_id = '$_GET[disciplin]'
AND horse_id = horse_id
AND horse_type = '$_GET[type]'
GROUP BY horse_id
ORDER BY SUM(point) DESC, SUM(IF(competition_place='1',1,0)) DESC") or die(mysql_error());

    while ($row = mysql_fetch_array($get_horses)) {

    $get_hest = mysql_query("SELECT * FROM rl_horses WHERE horse_id = '$row[horse_id]'") or die(mysql_error());
    $row_hest = mysql_fetch_array($get_hest);

    $get_bruger = mysql_query("SELECT * FROM rl_users WHERE user_id = '$row_hest[user_id]'") or die(mysql_error());
    $row_bruger = mysql_fetch_array($get_bruger);

?>
    <tr>

        <td class="td9">
            <strong><?php echo $i;?></strong>
        </td>
        <td class="td8">
            <a class="fkrlink" href="competitions.php?show_user=<?php echo $row_bruger[user_id]; ?>&aar=<?php echo $_GET['aar']; ?>"><?php echo $row_bruger[name]; ?></a>
        </td>
        <td class="td8">
<?php
    echo $row_hest[name];
?>
        </td>
        <td class="td9">
            <?php echo $row[point]; ?>
        </td>
    </tr>
<?php
    $i++;
    }
?>
</table>

Jeg har prøvet nogle af de ting som før er blevet spurgt om, men kan ikke få dem til at virke, håber en kan hjælpe.

Mvh ZiPs
Avatar billede arne_v Ekspert
28. marts 2008 - 01:20 #1
prøv:

<?php
    $i++;
  }
?>

->

<?php
    if($row[point] != $lastpoint) $i++;
    $lastpoint = $row[point];
  }
?>

og:

$i = 1;

->

$i = 1;
$lastpoint = -1;
Avatar billede coderdk Praktikant
28. marts 2008 - 01:23 #2
Prøv:

<?php
    $i = 0;
    $get_horses = mysql_query("SELECT horse_type, disciplin_id, year, horse_id AS horse_id, SUM( point ) AS point
FROM rl_competition
WHERE year = '$_GET[aar]'
AND disciplin_id = '$_GET[disciplin]'
AND horse_id = horse_id
AND horse_type = '$_GET[type]'
GROUP BY horse_id
ORDER BY SUM(point) DESC, SUM(IF(competition_place='1',1,0)) DESC") or die(mysql_error());
    $old = 0;
    while ($row = mysql_fetch_array($get_horses)) {

        if ( $row['point'] != $old )
        {
            $i++;
        }

    $get_hest = mysql_query("SELECT * FROM rl_horses WHERE horse_id = '$row[horse_id]'") or die(mysql_error());
    $row_hest = mysql_fetch_array($get_hest);

    $get_bruger = mysql_query("SELECT * FROM rl_users WHERE user_id = '$row_hest[user_id]'") or die(mysql_error());
    $row_bruger = mysql_fetch_array($get_bruger);

?>
    <tr>

        <td class="td9">
            <strong><?php echo $i;?></strong>
        </td>
        <td class="td8">
            <a class="fkrlink" href="competitions.php?show_user=<?php echo $row_bruger[user_id]; ?>&aar=<?php echo $_GET['aar']; ?>"><?php echo $row_bruger[name]; ?></a>
        </td>
        <td class="td8">
<?php
    echo $row_hest[name];
?>
        </td>
        <td class="td9">
            <?php echo $row[point]; ?>
        </td>
    </tr>
<?php
    }
?>
</table>
Avatar billede coderdk Praktikant
28. marts 2008 - 01:24 #3
heh, beat me to it, og jeg manglede endda en linje:

<?php
    $i = 0;
    $get_horses = mysql_query("SELECT horse_type, disciplin_id, year, horse_id AS horse_id, SUM( point ) AS point
FROM rl_competition
WHERE year = '$_GET[aar]'
AND disciplin_id = '$_GET[disciplin]'
AND horse_id = horse_id
AND horse_type = '$_GET[type]'
GROUP BY horse_id
ORDER BY SUM(point) DESC, SUM(IF(competition_place='1',1,0)) DESC") or die(mysql_error());
    $old = 0;
    while ($row = mysql_fetch_array($get_horses)) {

        if ( $row['point'] != $old )
        {
            $i++;
            $old = $row['point'];
        }

    $get_hest = mysql_query("SELECT * FROM rl_horses WHERE horse_id = '$row[horse_id]'") or die(mysql_error());
    $row_hest = mysql_fetch_array($get_hest);

    $get_bruger = mysql_query("SELECT * FROM rl_users WHERE user_id = '$row_hest[user_id]'") or die(mysql_error());
    $row_bruger = mysql_fetch_array($get_bruger);

?>
    <tr>

        <td class="td9">
            <strong><?php echo $i;?></strong>
        </td>
        <td class="td8">
            <a class="fkrlink" href="competitions.php?show_user=<?php echo $row_bruger[user_id]; ?>&aar=<?php echo $_GET['aar']; ?>"><?php echo $row_bruger[name]; ?></a>
        </td>
        <td class="td8">
<?php
    echo $row_hest[name];
?>
        </td>
        <td class="td9">
            <?php echo $row[point]; ?>
        </td>
    </tr>
<?php
    }
?>
</table>
Avatar billede zips Juniormester
28. marts 2008 - 01:28 #4
Hej arne_v

Det er næsten rigtigt, men den skrive det første nr derefter samme nr. kan ses her
http://www.prebendahl.dk/rangliste/index.php

Koden ser nu sådan her ud

<?php
    $i = 1;
    $lastpoint = -1;
    $get_horses = mysql_query("SELECT horse_type, disciplin_id, year, horse_id AS horse_id, SUM( point ) AS point
FROM rl_competition
WHERE year = '$_GET[aar]'
AND disciplin_id = '$_GET[disciplin]'
AND horse_id = horse_id
AND horse_type = '$_GET[type]'
GROUP BY horse_id
ORDER BY SUM(point) DESC, SUM(IF(competition_place='1',1,0)) DESC") or die(mysql_error());

    while ($row = mysql_fetch_array($get_horses)) {

    $get_hest = mysql_query("SELECT * FROM rl_horses WHERE horse_id = '$row[horse_id]'") or die(mysql_error());
    $row_hest = mysql_fetch_array($get_hest);

    $get_bruger = mysql_query("SELECT * FROM rl_users WHERE user_id = '$row_hest[user_id]'") or die(mysql_error());
    $row_bruger = mysql_fetch_array($get_bruger);

?>
    <tr>

        <td class="td9">
            <strong><?php echo $i;?></strong>
        </td>
        <td class="td8">
            <a class="fkrlink" href="competitions.php?show_user=<?php echo $row_bruger[user_id]; ?>&aar=<?php echo $_GET['aar']; ?>"><?php echo $row_bruger[name]; ?></a>
        </td>
        <td class="td8">
<?php
    echo $row_hest[name];
?>
        </td>
        <td class="td9">
            <?php echo $row[point]; ?>
        </td>
    </tr>
<?php
    if($row[point] != $lastpoint) $i++;
    $lastpoint = $row[point];
  }
?>
Avatar billede coderdk Praktikant
28. marts 2008 - 01:29 #5
Så vidt jeg lige kan se, kan du også nøjes med én query, og dermed skåne din server lidt:

<?php

    $i = 0;
    $sql = "
        SELECT
            c.horse_type, c.disciplin_id, c.year, c.horse_id, SUM( c.point ) AS point
            ,u.user_id, u.name AS uname, h.name AS hname
        FROM
            rl_competition AS c
        INNER JOIN
            rl_horses AS h
        ON
            c.horse_id = h.horse_id
        INNER JOIN
            rl_users AS u
        ON
            h.user_id = u.user_id
        WHERE
            year = '$_GET[aar]'
            AND disciplin_id = '$_GET[disciplin]'
            AND horse_id = horse_id
            AND horse_type = '$_GET[type]'
        GROUP BY
            c.horse_id
        ORDER BY
            SUM(point) DESC
            ,SUM(IF(c.competition_place='1',1,0)) DESC
        ";
    $get_horses = mysql_query($sql) or die(mysql_error());
    $old = 0;
    while ($row = mysql_fetch_array($get_horses)) {

        if ( $row['point'] != $old )
        {
            $i++;
            $old = $row['point'];
        }

?>
    <tr>
        <td class="td9">
            <strong><?php echo $i;?></strong>
        </td>
        <td class="td8">
            <a class="fkrlink" href="competitions.php?show_user=<?php echo $row['user_id']; ?>&aar=<?php echo $_GET['aar']; ?>"><?php echo $row['uname']; ?></a>
        </td>
        <td class="td8">
            <?php echo $row['hname']; ?>
        </td>
        <td class="td9">
            <?php echo $row['point']; ?>
        </td>
    </tr>
<?php
    }
?>
</table>
Avatar billede coderdk Praktikant
28. marts 2008 - 01:31 #6
Hvis du får ambiguous fejl, er det WHERE der mangler tabel-specifikationer, i.e. horse_id skal være c.horse_id osv...
Avatar billede zips Juniormester
28. marts 2008 - 01:32 #7
Prøver lige at sætte coderdk første kode ind, så den anden ;-)
Avatar billede zips Juniormester
28. marts 2008 - 01:47 #8
Hej coderdk

Den første virke perfekt, mange tak for hjælpen, jeg har prøvet den anden du skrev og fik den ambiguous fejl, men prøver at rette den til senerer når nu det hjælper på serveren.

Skriv et svar

Mvh ZiPs
Avatar billede coderdk Praktikant
28. marts 2008 - 08:27 #9
Ok :) Prøv lige denne:

<?php

    $i = 0;
    $sql = "
        SELECT
            c.horse_type, c.disciplin_id, c.year, c.horse_id, SUM( c.point ) AS point
            ,u.user_id, u.name AS uname, h.name AS hname
        FROM
            rl_competition AS c
        INNER JOIN
            rl_horses AS h
        ON
            c.horse_id = h.horse_id
        INNER JOIN
            rl_users AS u
        ON
            h.user_id = u.user_id
        WHERE
            c.year = '$_GET[aar]'
            AND c.disciplin_id = '$_GET[disciplin]'
            AND c.horse_type = '$_GET[type]'
        GROUP BY
            c.horse_id
        ORDER BY
            SUM(point) DESC
            ,SUM(IF(c.competition_place='1',1,0)) DESC
        ";
    $get_horses = mysql_query($sql) or die(mysql_error());
    $old = 0;
    while ($row = mysql_fetch_array($get_horses)) {

        if ( $row['point'] != $old )
        {
            $i++;
            $old = $row['point'];
        }

?>
    <tr>
        <td class="td9">
            <strong><?php echo $i;?></strong>
        </td>
        <td class="td8">
            <a class="fkrlink" href="competitions.php?show_user=<?php echo $row['user_id']; ?>&aar=<?php echo $_GET['aar']; ?>"><?php echo $row['uname']; ?></a>
        </td>
        <td class="td8">
            <?php echo $row['hname']; ?>
        </td>
        <td class="td9">
            <?php echo $row['point']; ?>
        </td>
    </tr>
<?php
    }
?>
</table>
Avatar billede zips Juniormester
28. marts 2008 - 10:58 #10
Hej coderdk

Den sidste virker perfekt, jeg kan godt se at jeg skal lære meget mere før jeg kan stykke sådan en sammen ;-)

Mvh ZiPs
Avatar billede zips Juniormester
28. marts 2008 - 11:33 #11
Lige som det hele virker får jeg at vide at det ikke skal være sådan, ja jeg må havet misforstået noget.

Det skal være sådan at, hvis der er to ens skal den efterfølgende være højre, som her i listen.

---------------------
Plads | Navn | Point
  1  | Hans |  118
  2  | Jens |  115
  2  | John |  115
  4  | Lars |  114
---------------------

Øv var ellers lige så glad for det coderdk har lavet som jeg jo spurgte om, jeg beklager.

Mvh ZiPs
Avatar billede coderdk Praktikant
28. marts 2008 - 11:56 #12
Skal det andet 2 være et 3 eller skal 4 være 3 eller skal det rent faktisk se sådan ud? For den giver da ikke så meget mening :D
Avatar billede zips Juniormester
28. marts 2008 - 12:10 #13
;-) jeg forstå dig, det var nok også her det gik galt for mig, men det skal være som den nye tabel.

Her kan man se hvad det er de ønsker, http://www.nsrklub.dk/championater.php ved at vælge spring og år 2004 kan man se placeringe gør som jeg skriver her oppe.

Ps: har lavet et nyt spørgesmål med nye point ;-)

Mvh ZiPs
Avatar billede coderdk Praktikant
28. marts 2008 - 12:24 #14
Prøv lige:

<?php

    $i = 0;
    $r = 0;
    $sql = "
        SELECT
            c.horse_type, c.disciplin_id, c.year, c.horse_id, SUM( c.point ) AS point
            ,u.user_id, u.name AS uname, h.name AS hname
        FROM
            rl_competition AS c
        INNER JOIN
            rl_horses AS h
        ON
            c.horse_id = h.horse_id
        INNER JOIN
            rl_users AS u
        ON
            h.user_id = u.user_id
        WHERE
            c.year = '$_GET[aar]'
            AND c.disciplin_id = '$_GET[disciplin]'
            AND c.horse_type = '$_GET[type]'
        GROUP BY
            c.horse_id
        ORDER BY
            SUM(point) DESC
            ,SUM(IF(c.competition_place='1',1,0)) DESC
        ";
    $get_horses = mysql_query($sql) or die(mysql_error());
    $old = 0;
    while ($row = mysql_fetch_array($get_horses)) {
        $r++;
        if ( $row['point'] != $old )
        {
            $i = $r;
            $old = $row['point'];
        }

?>
    <tr>
        <td class="td9">
            <strong><?php echo $i;?></strong>
        </td>
        <td class="td8">
            <a class="fkrlink" href="competitions.php?show_user=<?php echo $row['user_id']; ?>&aar=<?php echo $_GET['aar']; ?>"><?php echo $row['uname']; ?></a>
        </td>
        <td class="td8">
            <?php echo $row['hname']; ?>
        </td>
        <td class="td9">
            <?php echo $row['point']; ?>
        </td>
    </tr>
<?php
    }
?>
</table>
Avatar billede zips Juniormester
28. marts 2008 - 12:34 #15
Hej coderdk

Du er super... det virker også perfekt, kan ikke takke nok, mange tak for hjælpen.

Husk dine point i det andet spørgesmål jeg har skrevet om dette.

Mvh ZiPs
Avatar billede coderdk Praktikant
28. marts 2008 - 12:43 #16
Nah, svar selv og acceptér dit eget svar :) Den var tæt nok på dette spørgsmål :)
Avatar billede zips Juniormester
28. marts 2008 - 12:48 #17
Takker igen, altid skønt med super flinke personer som vil hjælpe.
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
Computerworld tilbyder specialiserede kurser i database-management

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