Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Datenbankabfrage mit negativen Werten sortieren“

ackermaennchen

Normalo

Teammitglied
Hi zusammen ich hab in einer Tabelle für eine Dartliga, nun lass ich die Tabelle per php einlesen und sortieren.
PHP:
ORDER BY punkte DESC, differenz DESC, spiele DESC, vorname ASC"
allerdings hab ich bei der Differenz das Problem, das er die negativwerte nicht richtig einsortiert.



Wobei mir gerade auch auffällt das er gerade auch bei den Postiven werten was durcheinander bringt und die Differenz +3 zwischen 2x +5 haut

Edit, letzteres konnte ich lösen in dem ich die Sortierung nach Vornamen weggelassen habe.
 

buerzel

Versuch macht kluch!

Teammitglied
Dem Feld differenz scheint ein falscher Datentyp zugeordnet zu sein - sollte SMALLINT bzw. INT sein.
 

ackermaennchen

Normalo

Teammitglied
PHP:
function differenz($userid, $liga)
{
    $season = getSeasonName($liga);

    require("./asset/mysql.php");
    $summe1_sql = $mysql->prepare("SELECT SUM(s1_ergebnis) AS value_sum FROM eingaben WHERE spieler1 = :userid AND season= :season AND gespielt= 2 AND liga = :liga");
    $summe1_sql->bindParam(":userid", $userid);
    $summe1_sql->bindParam(":season", $season);
    $summe1_sql->bindParam(":liga", $liga);
    $summe1_sql->execute();
    $summe1 = $summe1_sql->fetch(PDO::FETCH_ASSOC);

    require("./asset/mysql.php");
    $summe2_sql = $mysql->prepare("SELECT SUM(s2_ergebnis) AS value_sum2 FROM eingaben WHERE spieler2 = :userid AND season= :season AND gespielt= 2 AND liga = :liga");
    $summe2_sql->bindParam(":userid", $userid);
    $summe2_sql->bindParam(":season", $season);
    $summe2_sql->bindParam(":liga", $liga);
    $summe2_sql->execute();
    $summe2 = $summe2_sql->fetch(PDO::FETCH_ASSOC);

    $summe = $summe1['value_sum'] + $summe2['value_sum2'];

    require("./asset/mysql.php");
    $geg_summe1_sql = $mysql->prepare("SELECT SUM(s2_ergebnis) AS value_sum_geg FROM eingaben WHERE spieler1 = :userid AND season= :season AND gespielt= 2 AND liga = :liga");
    $geg_summe1_sql->bindParam(":userid", $userid);
    $geg_summe1_sql->bindParam(":season", $season);
    $geg_summe1_sql->bindParam(":liga", $liga);
    $geg_summe1_sql->execute();
    $geg_summe1 = $geg_summe1_sql->fetch(PDO::FETCH_ASSOC);

    require("./asset/mysql.php");
    $geg_summe2_sql = $mysql->prepare("SELECT SUM(s1_ergebnis) AS value_sum_geg2 FROM eingaben WHERE spieler2 = :userid AND season= :season AND gespielt= 2 AND liga = :liga");
    $geg_summe2_sql->bindParam(":userid", $userid);
    $geg_summe2_sql->bindParam(":season", $season);
    $geg_summe2_sql->bindParam(":liga", $liga);
    $geg_summe2_sql->execute();
    $geg_summe2 = $geg_summe2_sql->fetch(PDO::FETCH_ASSOC);
    $geg_summe = $geg_summe1['value_sum_geg'] + $geg_summe2['value_sum_geg2'];
    $gesamt = $summe - $geg_summe;
    return $gesamt;
}
Mhh, grad geschaut, die Differenz wird in einer Function errechnet. und ist in der Datenbank als eigener Wert gar nicht eingetragen
 

ackermaennchen

Normalo

Teammitglied
Das wäre die Ausgabe der Tabelle

PHP:
echo "<div class='ligatab'>
            Tabelle ".$liga['liga'].". Liga | Saison: ".getSeasonName($liga[0])."
          </div>
          <div style='overflow-x:auto'>
            <table  class='tabelle'>
              <thead>
                <tr>
                  <th></th>
                  <th>Name</th>
                  <th>Spiele</th>
                  <th>G</th>
                  <th>V</th>
                  <th>U</th>
                  <th>+/-</th>
                  <th>Punkte</th>
                </tr>
              </thead>
              <tbody>";

    $rang = 1;
    foreach ($endergebnis as $endergebnis) {
        echo "<tr>
<td class='rang'>".$rang."</td>
<td><a href='index.php?page=profil&uid=".$endergebnis['userid']."'>".$endergebnis['vorname']." ".$endergebnis['nachname']."</a></td>
<td>".$endergebnis['spiele']."</td>
<td>".$endergebnis['gewonnen']."</td>
<td>".$endergebnis['verloren']."</td>
<td>".$endergebnis['unentschieden']."</td>
<td>".differenz($endergebnis['userid'], $liga['liga'])."</td>
<td>".$endergebnis['punkte']."</td>
</tr>";
        $rang += 1;
    }
    echo "</tbody>";
    echo "</table>";
    echo "</div>";
 

buerzel

Versuch macht kluch!

Teammitglied
Wichtiger ist die Tabellendefinition. Denn schon da müsste der Datentyp der Felder, mit denen du in differenz rechnest, numerisch sein. Dann bräuchtest du auch kein AS VALUE in der Funktion.
 
Zuletzt bearbeitet:

ackermaennchen

Normalo

Teammitglied
Jetzt steh ich aufn schlauch

Eig programmiert das n Kumpel von mir. Also die Funktionen und php, ich mach da eigentlich nur das optische
 

owieortho

Aktives Mitglied

Da stimmt doch in der gesamten Berechnung was nicht:
bspw. Spieler 2 hat die gleichen Ergebnisse wie Spieler 1 und 3 (G.V,U) und bekommt dennoch unter +/- statt 5 nur 3.
Das wiederholt sich bei Spielern 5, 6, und 7

Und warum wird die Berechnung an PHP "ausgelagert". Die Tabelle ließe sich doch ohne weiteres schon mit SQL erzeugen - eine Fehlerquelle weniger.

Bedarf es wiederholter require-calls in der function? Erscheint mir redundant, ebenso wie die sich immer wiederholenden Routinen.

O.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.189
Beiträge
2.582.077
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben