Ankündigung

Einklappen
Keine Ankündigung bisher.

Zählen Summe und Rang ermitteln

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zählen Summe und Rang ermitteln

    Hallo Leute,


    wie bekomme ich das denn hin damit er mir den Rang ( Tabellen Platz richtig anzeigt?

    moment zählt er alle punkte korrekt zusammen und reiht sie auch richtig nur der rang passt nicht.



    tttttttt.PNG


    PHP-Code:
      $query "SELECT  SUM(punkte) AS summe ,name , rang  FROM tabelle GROUP BY name ORDER BY punkte desc";




    $result mysqli_query($mysqli$query)
           or die (
    "MySQL-Error: " mysqli_error($mysqli));

        if (
    mysqli_num_rows($result))
        {
            
    $i 0;

            while (
    $row mysqli_fetch_assoc($result))
            {
               
    $style = ($i++ % 2) ? "class='light'" "class='red'";

               echo 
    "<tr>
              <td 
    $style>" htmlentities($row['rang'], ENT_QUOTES"UTF-8")   . "</td>
                      <td 
    $style>" htmlentities($row['name'], ENT_QUOTES"UTF-8") . "</td>
                      <td 
    $style>" htmlentities($row['summe'], ENT_QUOTES"UTF-8")   . "</td>


                    </tr>"
    ;

            }
        }
        else
          echo 
    "<tr>
                 <td colspan='5'>Keine Einträge in der Datenbank vorhanden
                </tr>\n"
    ;
    ?>
       </table>
      </body>
    </html> 

    Liebe Grüße
    Angehängte Dateien


  • #2
    Die Frage ist, warum du einen falschen Rang in die Datenbank speicherst?

    Davon abgesehen ist deine Datenbankabfrage fehlerhaft. Im GROUP BY sollten immer alle Spalten aus dem SELECT angeführt sein.

    Desweiteren kannst du dir das mit class="light" und class="red" sparen. Gerade und ungerade Zeilen kann man direkt mit CSS-Selektoren auswählen.

    Kommentar


    • #3
      PHP-Code:
      echo "<tr>
                <td 
      $style>" $i   "</td>
                        <td 
      $style>" htmlentities($row['name'], ENT_QUOTES"UTF-8") . "</td>
                        <td 
      $style>" htmlentities($row['summe'], ENT_QUOTES"UTF-8")   . "</td>


                      </tr>"

      Einen Rang in einer Datenbank abzuspeichern macht zumeist keinen Sinn, vor allem nicht wenn die Daten sich verändern (also Einträge dazukommen)

      Kommentar


      • #4
        "rang" fliegt raus, weil nicht in der Aggregation (und ausserdem dynamisch berechnet). Der "Trick" ist natürlich, nach der SUMME der Punkte zu sortieren.
        Code:
        SELECT  SUM(punkte) AS summe, name  FROM tabelle GROUP BY name ORDER BY SUM(punkte) desc
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Richtige Datenbanke haben rank() bzw. dense_rank() - Funktionen, um den Rang korrekt zu berechnen. Das solltest Du verwenden.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            HA! https://www.php-rocks.de/thema/28-ra...per-mysql.html

            Aber ja, ich glaube mysql unterstützt inzwischen auch rank https://dev.mysql.com/doc/refman/8.0...criptions.html
            Relax, you're doing fine.
            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

            Kommentar


            • #7
              Okay erstmal danke jungs...

              also brauch ich gar keine Spalte (rang,rank,ranking etc ) in der Datenbank tabelle anlegen?

              bin glaub zu dumm haha.


              Kommentar


              • #8
                Zitat von lstegelitz Beitrag anzeigen
                "rang" fliegt raus, weil nicht in der Aggregation (und ausserdem dynamisch berechnet). Der "Trick" ist natürlich, nach der SUMME der Punkte zu sortieren.
                Code:
                SELECT SUM(punkte) AS summe, name FROM tabelle GROUP BY name ORDER BY SUM(punkte) desc
                Hallo Istegelitz,

                Ja aber dann fehlen links die Nummern für die Plätze...


                ist jetzt nicht tragisch aber wenn da über 100 Leute in der tabelle sind würde ich gerne sofort sehen auf welchem Platz ich mich befinde.

                Kommentar


                • #9
                  Zitat von mleo08179 Beitrag anzeigen
                  Ja aber dann fehlen links die Nummern für die Plätze...
                  Dann füge sie doch hinzu. Zählervariable und geht schon.

                  Kommentar


                  • #10
                    Da es Darstellung ist, geht das natürlich auch bequem über CSS wenn man mag.
                    https://www.mediaevent.de/css/counte...ter-reset.html

                    Kommentar


                    • #11
                      Ja das würde gehen aber wenn zwei Spieler die gleichen Punkte haben würden Sie beide zbs Platz 1 einnehmen.

                      lg

                      Kommentar


                      • #12
                        Siehe zB oben die Beiträge zu RANK() oder der von VPh, etc.. Oder du programmierst das in der Schleife in PHP selbst mit, ist jetzt auch nicht soo schwer.
                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          schaffe es nicht mal so haha.

                          ich gebs auf.

                          danke trotzdem.

                          PHP-Code:
                          <!DOCTYPE html>
                          <html lang="de">
                            <head>
                              <meta charset="utf-8" />
                              <meta name="viewport" content="width=device-width, initial-scale=1.0" />
                              <title>Anmeldung</title>
                              <link rel="stylesheet" type="text/css" href="style_cgc_tabelle.css" />
                            </head>
                            <body>








                          <?php
                              $mysqli 
                          mysqli_connect('localhost''''''');

                              if (
                          mysqli_connect_errno())
                                die (
                          "Connect failed: " mysqli_connect_error());

                              
                          mysqli_set_charset($mysqli"utf8");


                          <
                          style>
                          div.platzhalter {
                           
                          counter-resetplatz;
                          }

                          div.platzhalter p {
                           
                          counter-incrementplatz;
                          }

                          div.platzhalter p::before {
                           
                          contentcounter(platz". ";
                           
                          colorBlue;
                          }
                          </
                          style>







                            
                          $query "SELECT  SUM(punkte) AS summe, name  FROM tabelle GROUP BY name ORDER BY SUM(punkte) desc";




                          $result mysqli_query($mysqli$query)
                                 or die (
                          "MySQL-Error: " mysqli_error($mysqli));

                              if (
                          mysqli_num_rows($result))
                              {
                                  
                          $i 0;

                                  while (
                          $row mysqli_fetch_assoc($result))



                                  {
                                     
                          $style = ($i++ % 2) ? "class='light'" "class='red'";





                                     echo 
                          "<tr>

                                    <td <div class="
                          platzhalter"></div> </td>
                                    <td 
                          $style>" htmlentities($row['rang'], ENT_QUOTES"UTF-8")   . "
                                            <td 
                          $style>" htmlentities($row['name'], ENT_QUOTES"UTF-8") . "</td>
                                            <td 
                          $style>" htmlentities($row['summe'], ENT_QUOTES"UTF-8")   . "</td>

                                          </tr>"
                          ;




                                  }
                              }
                              else
                                echo 
                          "<tr>
                                       <td colspan='5'>Keine Einträge in der Datenbank vorhanden
                                      </tr>\n"
                          ;
                          ?>
                             </table>
                            </body>
                          </html>

                          Kommentar


                          • #14
                            Du schreibst CSS inmitten von PHP. Warum? o.O
                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar


                            • #15
                              hab schon alles probiert auch wenn ich es ganz nach oben gebe zeigt er mir keinen platzhalter an.

                              Kommentar

                              Lädt...
                              X