Problem mit Sortierung und NULL

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

  • Problem mit Sortierung und NULL

    hallo!
    habe eine tabelle für eine liga erstellt. die funzt so weit ganz gut. ich lasse ua. die TORDIFFERENZ direkt aus der db errechnen.
    mein problem ist wie folgt:
    wenn noch nicht alle mannschaften gespielt haben ist die TORDIFFERENZ bei einigen teams NULL. wie schaffe ich es, dass "-3" weniger als NULL ist?

    gibt es da eine spezielle möglichkeit bei ORDER BY?

    danke

    PHP-Code:
    SELECT  v.name_kurz, [...]
            
    SUM(
                (IF(
    h.id_heimverein v.idh.heimtoreh.gasttore)) - 
                (IF(
    h.id_heimverein v.idh.gasttoreh.heimtore))
                ) AS 
    Tordifferenz 
    FROM liga_verein v
    liga h 
    WHERE h
    .spieltag <= AND (h.id_heimverein=v.id OR h.id_gastverein=v.id
    GROUP BY v.name_kurz 
    ORDER BY Punkte DESC
    Tordifferenz DESCTore DESC 

  • #2
    z.B. mit IF abfragen und einen geeigneten Wert bei NULL geben (aber nur in ORDER BY).

    Kommentar


    • #3
      Da hätte ich mal ne Zwischenfrage an die Zeitprofis^^..

      Ist es schneller, die Differenz gleich per SQL-Statement zu berechnen und dann auszugeben oder die Tore zu selectieren und dann per PHP die differenz auszurechnen + auszugeben?
      Kann man das überhaupt so unterscheiden?

      mfg

      Kommentar


      • #4
        PHP-Code:
        SUM(
        (IF(
          
        h.id_heimverein v.id,
                (IF(
        h.heimtore NULL0h.heimtore)),
                (IF(
        h.gasttore NULL0h.gasttore))
        )) - 
        (IF(
           
        h.id_heimverein v.id
                (IF(
        h.gasttore NULL0h.gasttore)),
                (IF(
        h.heimtore NULL0h.heimtore))
        ))
        ) AS 
        Tordifferenz 
        hab es einmal so probiert. wird allerdings auch mit NULL ausgegeben.
        oder hast du was anderes gemeint.

        Kommentar


        • #5
          = NULL ist unfug, IS NULL ist besser

          Kommentar


          • #6
            Original geschrieben von Blackgreetz
            Da hätte ich mal ne Zwischenfrage an die Zeitprofis^^..

            Ist es schneller, die Differenz gleich per SQL-Statement zu berechnen und dann auszugeben oder die Tore zu selectieren und dann per PHP die differenz auszurechnen + auszugeben?
            Kann man das überhaupt so unterscheiden?

            mfg
            Ist glaube etwas untergegangen. Weiß jmd. was dazu?

            mfg

            Kommentar


            • #7
              Wir sehen hier nur deine Query. Wir wissen nicht wie flink dein DBS und dein PHP-Code sind. Daher kann man das nicht mit Gewissheit beantworten.
              Teste einfach beide Varianten.

              Kommentar


              • #8
                Nachdem du auch danach sortierst ist es potentiell erstmal besser die Berechnung direkt der DB zu überlassen.

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Original geschrieben von Blackgreetz
                  Da hätte ich mal ne Zwischenfrage an die Zeitprofis^^..

                  Ist es schneller, die Differenz gleich per SQL-Statement zu berechnen und dann auszugeben oder die Tore zu selectieren und dann per PHP die differenz auszurechnen + auszugeben?
                  Kann man das überhaupt so unterscheiden?

                  mfg
                  Ich würde nach Möglichkeit die Last verteilen, d.h. das was die DB kann, lasse ich sie tun, den Rest beim Client (PHP oder was auch immer).

                  Kommentar


                  • #10
                    Ihr müsst schon unterscheiden zwischen mir/meiner Frage und dem Threadstarter . D.h. ich will nicht danach sortieren und das oben ist dann ansich auch nicht mein Query.

                    Ich hab folgende Tabellenstruktur (imaginär):

                    Rechnungen: RID | datum
                    Rechnungsartikel: RAID | RNID | Preis

                    Query müsste dann wiefolg aussehen:

                    PHP-Code:
                    SELECT From Rechnungen Left Join Rechnungsartikel ON RNID RID 
                    Jetzt würd ich natürlich am ende jeweils den Endpreis einer Rechnung haben.
                    Sollt ich jetzt den per PHP oder im MySQL berechnen lassen?

                    Jetzt fällt mir ansich aber auf, dass ich ein SUM nicht in diesen Query einbauen kann, oder liegt ich da gerade falsch? (ohne zusätzlichen SELECT)

                    mfg

                    Kommentar


                    • #11
                      1. Warum LEFT JOIN?
                      2. Warum kannst du kein SUM anwenden?

                      Kommentar


                      • #12
                        Wenn du sowohl die Artikel, wie auch die Summe haben möchtest, geht das idT nicht so einfach.
                        Was du machen könntest wäre ein Self-Join oder ein Subquery.

                        So oder so: Trotzdem MySQL rechnen lassen. Allein schon deshalb, weil du ansonsten die komplette Tabelle zum Webserver über die Leitung schiebst, obwohl du nur eine einzige Zahl haben willst: Nämlich die Summe.

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          Original geschrieben von asp2php
                          1. Warum LEFT JOIN?
                          2. Warum kannst du kein SUM anwenden?
                          1) Hatte nur INNER, Right und Left zur Auswahl - alle bringen das Gleiche Ergebnis in den Fällen.

                          2) Weil ich kein Group By drin hab, der für SUM doch notwendig ist.
                          ..und Group by kann ich nicht nehmen, weil ich dann natürlich nicht alle Artikel drin hab.

                          @ghostgambler:
                          Ja, für eine Rechnung brauch ich beides
                          SelfJoin guck ich mir gerade an.
                          Subquery wollte ich ja nicht bzw. hab ich erstmal ausgeschlossen gehabt (das meinte ich mit zusätzlichen Select)

                          Bin dann mal so frei und guck mir Selfjoins an.

                          Ansich muss ich ja alle Daten sowieso "über die Leitung schieben", sodass ich ansich auch in PHP addieren könnte, aber hätte eben gedacht/mich gefragt, dass MySQL da eventuell schneller wäre.

                          mfg
                          Zuletzt geändert von Blackgreetz; 18.11.2008, 15:18.

                          Kommentar


                          • #14
                            @asp2php
                            vielen danke, hat funktioniert!

                            PHP-Code:
                            (IF(h.id_heimverein v.id,
                               (IF(
                            h.heimtore IS NULL0h.heimtore)),
                               (IF(
                            h.gasttore IS NULL0h.gasttore))
                            )) - ... 

                            Kommentar

                            Lädt...
                            X