[gelöst] Order by

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

  • [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 ---"

    Kommentar


    • #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]

      Kommentar


      • #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 ---"

        Kommentar


        • #5
          Zitat von streuner Beitrag anzeigen
          Hm...nicht ganz.
          Was nicht ganz? Deine Antwort ist irgendwie etwas verwirrend.

          Zitat von streuner Beitrag anzeigen
          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.

          Zitat von streuner Beitrag anzeigen
          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.

          Zitat von streuner Beitrag anzeigen
          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.

          Zitat von streuner Beitrag anzeigen
          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]

          Kommentar


          • #6
            Zitat von AmicaNoctis Beitrag anzeigen
            Was nicht ganz? Deine Antwort ist irgendwie etwas verwirrend.
            sorry



            Zitat von AmicaNoctis Beitrag anzeigen
            Ist nicht einfacher machbar, eins von beiden (left join oder subselect) braucht man dafür.
            ok.



            Zitat von AmicaNoctis Beitrag anzeigen
            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.

            Zitat von AmicaNoctis Beitrag anzeigen
            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?

            Zitat von AmicaNoctis Beitrag anzeigen
            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 ---"

            Kommentar


            • #7
              Zitat von streuner Beitrag anzeigen
              SELECT TOP 1 * ...
              Ist MS SQL-Server.

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

              Kommentar


              • #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 ---"

                Kommentar


                • #9
                  Zitat von streuner Beitrag anzeigen
                  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]

                  Kommentar


                  • #10
                    Zitat von streuner Beitrag anzeigen
                    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

                    Kommentar


                    • #11
                      Zitat von AmicaNoctis Beitrag anzeigen
                      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?

                      Zitat von AmicaNoctis Beitrag anzeigen
                      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 ---"

                      Kommentar

                      Lädt...
                      X