ORDER BY Problem

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

  • ORDER BY Problem

    Hallo Zusammen,

    ich habe folgendes order by Problem. Ich frage aus 2 tabellen mittel inner join die punktezahl ab. zb.

    statement sieht so aus:

    SELECT tabelle1.Name, (tabelle1.punkte+tabelle2.punkte) AS points FROM tabelle1 INNER JOIN tabelle2 ON(tabelle1.id=tabelle2.id) where tabelle1.klasse=20 order by points

    also die addition funktioniert, nur kann ich nicht nach points sortieren.

    Ich möchte also aus beiden tabellen die punktezahl wissen, diese addieren und nach der höchsten Punktzahl sortieren.

    was stimmt hier nicht?

    vielen dank für eure hilfe

    roland

  • #2
    Re: ORDER BY Problem

    Original geschrieben von phpfreak
    nur kann ich nicht nach points sortieren
    das heißt?

    fehlermeldung?
    falsch sortiert?

    ORDER BY tabelle1.punkte+tabelle2.punkte?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      vielen dank. so funktionierts.

      order by tabelle1.punkte+tabelle2.punkte

      ich wollte eben nach points sortieren, dass ich mittels "as" erzeugt habe. es gab keine fehlermeldung, aber auch keine sortierung. wurde einfach vom parser ignoriert.

      thx again

      Kommentar


      • #4
        Original geschrieben von phpfreak
        ich wollte eben nach points sortieren, dass ich mittels "as" erzeugt habe.
        das steht dir aber zu dem zeitpunkt noch nicht zur verfügung.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Natürlich steht einem ORDER BY auch ein im SELECT erzeugter Alias zur Verfügung ... !
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            und welche erklärung gibt es dann dafür, dass ORDER BY points keine auswirkung hat, ORDER BY tabelle1.punkte+tabelle2.punkte aber den gewünschten effekt bewirkt ...?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Ganz einfach ... es fehlte ein DESC ... !

              Also:

              ORDER BY points DESC

              Aber sowas kann ein phpfreak natürlich nicht wissen ... sowas weiss nur ein sqlfreak ... aber der ist heute nicht da ... !
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                Merke: kommt keine Fehlermeldung ... so ist das Statement zumindest syntaktisch korrekt ... und der Fehler liegt in der Logik.
                Wäre ein Alias nicht bekannt, würde zumindest eine Fehlermeldung à la: "Unknown Attribute `points` ... " kommen ... !
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  Original geschrieben von goth
                  Ganz einfach ... es fehlte ein DESC ... !
                  seit wann muss man denn bei ORDER BY die richtung angeben?
                  ASC ist doch default?


                  und bei order by tabelle1.punkte+tabelle2.punkte ist die sortierrichtung doch genauso wenig angegeben - also was macht diese in dem einen fall erforderlich, im anderen aber nicht ...?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Original geschrieben von goth
                    Wäre ein Alias nicht bekannt, würde zumindest eine Fehlermeldung à la: "Unknown Attribute `points` ... " kommen ... !
                    hatte das letzte woche, und zwar mit DATE_FORMAT (...) as datum und dann order by datum, da kam unknown column datum, obwohl er mir die datumsspalte ausgibt ohne order by

                    hab dann den DATE_FORMAT gulasch auch in die where klausel geschrieben, was mich aber irgendwie stört


                    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                    Kommentar


                    • #11
                      Aus der DOku:

                      A.5.4 Probleme mit alias

                      Sie können ein Alias verwenden, um auf eine Spalte im GROUP BY-, ORDER BY- oder HAVING-Teil zu verweisen. Aliase können auch verwendet werden, um Spalten bessere Namen zu geben:

                      SELECT SQRT(a*b) as wurzel FROM tabelle GROUP BY wurzel HAVING wurzel > 0;
                      SELECT id,COUNT(*) AS zaehl FROM tabelle GROUP BY id HAVING zaehl > 0;
                      SELECT id AS "kunden-kennung" FROM tabelle;

                      Beachten Sie, dass ANSI-SQL verbietet, in einer WHERE-Klausel auf ein Alias zu verweisen. Das liegt daran, dass der Spaltenwert möglicherweise noch nicht feststeht, wenn der WHERE-Code ausgeführt wird. Folgende Anfrage zum Beispiel ist unzulässig:

                      SELECT id,COUNT(*) AS zaehl FROM tabelle WHERE zaehl > 0 GROUP BY id;

                      Das WHERE-Statement wird ausgeführt, um festzulegen, welche Zeilen im GROUP BY-Teil enthalten sein sollen, während HAVING benutzt wird, um zu entscheiden, welche Zeilen der Ergebnismenge benutzt werden sollten.


                      An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                      Kommentar


                      • #12
                        @wahsaga: Muss man nicht ... nur wenn man die Anforderung "nach der höchsten Punktzahl sortieren." hat ... und damit ganz sicher meint höchste zuerst ... niedrigste zuletzt ... !

                        Im übrigen: http://dev.mysql.com/doc/mysql/en/SELECT.html 2. Aufzählung Punkt 1 ... !

                        @MaxP0W3R: Ebent ... keinerlei Probleme mit ORDER BY ... weil diese Klausel erst ganz zum Schluss ausgewertet wird (allerdings vor einem LIMIT) ... und somit bereits alle Werte bekannt sind ... und wenn man's sich dann ganz genau überlegt ist's auch logisch das ein Alias-Name u.U. in einer Where-Clause noch nicht bekannt ist, wenn er beispielsweise einer auf eine Aggregat-Funktion ist, deren Ergebnis ja erst im GROUP BY generiert wird ... mag sein das es schöner wäre wenn SQL die Aliase genauer differenzieren würde ... aber leider sind die Regeln so wie sie sind ... !
                        Zuletzt geändert von goth; 06.10.2004, 14:15.
                        carpe noctem

                        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                        Kommentar


                        • #13
                          eben meinte jmd. im MSN, ich solle mich mit HAVING probieren, wobei aber im Manual ja steht :

                          # The HAVING clause can refer to any column or alias named in a select_expr. It is applied nearly last, just before items are sent to the client, with no optimization. (LIMIT is applied after HAVING.)
                          # Don't use HAVING for items that should be in the WHERE clause. For example, do not write this:

                          mysql> SELECT col_name FROM tbl_name HAVING col_name > 0;

                          Write this instead:

                          mysql> SELECT col_name FROM tbl_name WHERE col_name > 0;



                          :/

                          ALso konkret:

                          In der DB ist eine spalte mit datetime, und ich möchte sowas machen:

                          SELECT DATE_FORMAT(datetime_spalte, '%m.%Y') as datum FROM tabelle WHERE datum = '09.2004';

                          als beispiel


                          wie löse ich sowas am elegantesten ?

                          habe bisher immer mit dem unix timestamp gearbeitet, den also als Integer in der DB gespeichert, aber in einem meiner neuen Projekte muss ich jetzt mit dem Feld arbeiten...

                          cya max


                          An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                          Kommentar


                          • #14
                            Der eleganteste Weg ist immer der, der von der Datenbank vorgesehen ist ... willst Du ein Datum in einer Datenbank speichern ... dann verwende einen Datums-Type ... willst Du einen ganzzahligen Wert speichern ... dann verwende einen Integer ... und nie anders ... !
                            carpe noctem

                            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                            Kommentar

                            Lädt...
                            X