[gelöst] Order by

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [gelöst] Order by

    Hi.

    Sehe gerade den Wald vor lauter Bäumen nicht. Hab eine recht einfache SQL Abfrage (MySQL DB) und will, dass für für jeweils 1 Produkt des Users die aktuellsten Daten ausgegeben werden: Siehe hier:

    SELECT * FROM tabelle WHERE member_id = '1' GROUP BY produktname ORDER BY datum DESC //oder ASC

    geht nicht:-(! Egal, ob ich "DESC/ASC" eingebe, kommen immer dieselben Werte raus. Die Ausgabe erfolgt, wie die Daten in der DB stehen, von oben nach unten und dann stimmt das aber mit dem aktuellsten Wert nicht. DESC o. ASC bezieht sich dann anscheinend schon auf die gefundenen Produkte und sortiert diese dann, aber es muss vorher nach dem aktuellsten Eintrag gefiltert werden. Was mache ich falsch?

    Danke.

    mfg streuner
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

  • #2
    Ich habe noch den "TOP" Befehl gefunden, aber hier gibt mir die MySQL DB auch eine Fehlermeldung aus:

    You have an error in your SQL syntax near...[usw.]
    Hatte folgendes probiert:

    SELECT TOP 1 * FROM tabelle WHERE user_id = '1' ORDER BY datum

    Liegt das an meiner DB Version?

    Thanx.

    mfg streuner
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

    Comment


    • #3
      Hallo,

      das TOP kenne ich nicht und ich vermute, MySQL geht es damit genau so. Dein vorheriger Versuch funktioniert zwar, aber nicht so, wie du erwartest.

      Kann es sein, dass dein Problem dem hier entspricht? Ganz unten findest du als Beispiel den "negativen Left Join". Der ist aus Performancegründen günstiger als eine Unterabfrage.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Comment


      • #4
        Hi.

        Hm...nicht ganz. Wollte eigentlich komplizierte Abfragen vermeiden, da ich davon ausgegangen bin, dass auch "einfach" mittels dem gezeigten Beispiel zu lösen ist.

        Der Top Befehl (wenn er funktioniert) soll anscheinend den LIMIT Befehl ersetzen, aber es ist gut möglich, dass er "nur" für MS SQL funktioniert (getestet).

        ASC oder DESC kann ich nicht vorher "einsetzen"? Hm, wenn es nicht anders geht muss ich das über LEFT JOIN machen.

        Danke.

        mfg streuner
        Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
        der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

        "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

        Comment


        • #5
          Originally posted by streuner View Post
          Hm...nicht ganz.
          Was nicht ganz? Deine Antwort ist irgendwie etwas verwirrend.

          Originally posted by streuner View Post
          Wollte eigentlich komplizierte Abfragen vermeiden, da ich davon ausgegangen bin, dass auch "einfach" mittels dem gezeigten Beispiel zu lösen ist.
          Ist nicht einfacher machbar, eins von beiden (left join oder subselect) braucht man dafür.

          Originally posted by streuner View Post
          Der Top Befehl (wenn er funktioniert) soll anscheinend den LIMIT Befehl ersetzen, aber es ist gut möglich, dass er "nur" für MS SQL funktioniert (getestet).
          Wenn TOP = LIMIT 1 ist, bringt er dir gar nichts. Limit arbeitet auf dem gesamten Result und nicht gruppenweise und TOP vermutlich ebenso.

          Originally posted by streuner View Post
          ASC oder DESC kann ich nicht vorher "einsetzen"?
          Na doch und das Ergebnis selektierst du dann nochmal mit GROUP BY und schon hast du ein Subselect.

          Originally posted by streuner View Post
          Hm, wenn es nicht anders geht muss ich das über LEFT JOIN machen.
          Was ist denn daran so furchtbar?
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Comment


          • #6
            Originally posted by AmicaNoctis View Post
            Was nicht ganz? Deine Antwort ist irgendwie etwas verwirrend.
            sorry



            Originally posted by AmicaNoctis View Post
            Ist nicht einfacher machbar, eins von beiden (left join oder subselect) braucht man dafür.
            ok.



            Originally posted by AmicaNoctis View Post
            Wenn TOP = LIMIT 1 ist, bringt er dir gar nichts. Limit arbeitet auf dem gesamten Result und nicht gruppenweise und TOP vermutlich ebenso.
            Ja, meinte ja auch "ähnlich". Du hast sicherlich recht, dass das nur überSubSelect zu lösen ist.

            Originally posted by AmicaNoctis View Post
            Na doch und das Ergebnis selektierst du dann nochmal mit GROUP BY und schon hast du ein Subselect.
            Ja, macht Sinn. Kann es bei Subselects bei größeren Datenmengen zu Performance Problemen kommen?

            Originally posted by AmicaNoctis View Post
            Was ist denn daran so furchtbar?
            die Tipparbeit
            Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
            der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

            "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

            Comment


            • #7
              Originally posted by streuner View Post
              SELECT TOP 1 * ...
              Ist MS SQL-Server.

              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Comment


              • #8
                Ok, danke. Hatte es mit Ms SQL Server getestet, da ging es. Bei meinen MySQL DB's nicht. Ähnlichen Befehl für "TOP" gibt es in MySQL nicht (außer LIMIT)?

                mfg streuner
                Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
                der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

                "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

                Comment


                • #9
                  Originally posted by streuner View Post
                  Ja, macht Sinn. Kann es bei Subselects bei größeren Datenmengen zu Performance Problemen kommen?
                  Ja! Bei korrelierten Subselects auf jeden Fall, daher vermeide ich die wo immer es geht. Unkorrelierte Subselects sind weniger schlimm, basieren ja aber meist selbst auf einem JOIN. (Für dich also das Maximum an "Tipparbeit" )

                  Daher nehme ich gleich einen JOIN und gar kein Subselect.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Comment


                  • #10
                    Originally posted by streuner View Post
                    Ok, danke. Hatte es mit Ms SQL Server getestet, da ging es. Bei meinen MySQL DB's nicht. Ähnlichen Befehl für "TOP" gibt es in MySQL nicht (außer LIMIT)?

                    mfg streuner
                    LIMIT ist TOP. Und umgekehrt. Hängt halt vom DB-System ab.

                    Peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Comment


                    • #11
                      Originally posted by AmicaNoctis View Post
                      Ja! Bei korrelierten Subselects auf jeden Fall, daher vermeide ich die wo immer es geht. Unkorrelierte Subselects sind weniger schlimm, basieren ja aber meist selbst auf einem JOIN. (Für dich also das Maximum an "Tipparbeit" )
                      Na super! "Weniger schlimm" heißt jetzt aber nicht, dass sich bei mehreren 10000 Datensätzen, Abfragen/Ausgaben im Sekundenbereich (z.B. 5-10 Sek.) bewegen?

                      Originally posted by AmicaNoctis View Post
                      Daher nehme ich gleich einen JOIN und gar kein Subselect.
                      Ok. Dann baue ich das gleich "vernünftig" mit Join auf!

                      Danke Dir nochmal.

                      mfg streuner
                      Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
                      der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

                      "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

                      Comment

                      Working...