Limitierte Abfrage -> von jeder Art nur einen

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

  • Limitierte Abfrage -> von jeder Art nur einen

    Hallo,

    ich habe eine Datenbank mit folgender Struktur:

    ID
    TITEL
    TIME
    ANB

    Bein ANB gibt es es die Werte 1, 2 und 3.

    So jetzt möchte ich als Ausgabe von jedem ANB jeweils nur eine haben (den mit dem größten Wert bei TIME) also in diesem Fall 3 Ergebnisse und diese sollen auch wieder nach der Spalte TIME sortiert werden.

    Kann ich das mit einer einzelnen Abfrage schaffen?

  • #2
    Hallo,

    ja, das geht. Siehe hier.

    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


    • #3
      Erstmal Danke für den Link, aber es geht nicht ganz.

      Ich habe jetzt folgende Abfrage

      Code:
      SELECT `title` , MAX( `time` )
      FROM news
      GROUP BY `anb`
      So jetzt habe ich folgende Daten in der Tabelle:
      ID = 1
      TITLE = Titel 1
      TIME = 201009151237
      ANB = 1

      ID = 2
      TITLE = Titel 2
      TIME = 201009161658
      ANB = 1

      ID = 3
      TITLE = Titel 3
      TIME = 201009240000
      ANB = 2

      ID = 4
      TITLE = Titel 4
      TIME = 201009240100
      ANB = 2

      So eigentlich bräuchte ich Titel 2 und Titel 4, aber die Abfrage gibt mir Titel 1 und Titel 3 aus.

      Kommentar


      • #4
        Ich sehe gerade das titel und time nicht übereinstimmen. Also er zeigt mir die größte time an, aber nicht den dazu passenden title

        Kommentar


        • #5
          Logisch. Im GROUP BY müssen alle Spalten aus dem SELECT angeführt sein, weil es sonst zu einem undefinierten Ergebnis kommen kann. Jede andere Datenbank würde dir Fehlermeldungen um die Ohren hauen, nur MySQL gibt sich da besonders großzügig und fehlertolerant.

          Kommentar


          • #6
            Lies den gesamten Thread. Dass die Variante mit max/group by dort nicht zum Ziel geführt hat und ich eine andere Variante vorgeschlagen hatte, die genau auf dein Problem passt, geht eigentlich deutlich hervor, dachte ich.
            [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


            • #7
              Ok Danke, hiermit geht es:

              Code:
              SELECT * FROM 
              (SELECT * FROM news ORDER BY time DESC) AS s
              GROUP BY anb
              ORDER BY time DESC

              Kommentar


              • #8
                Wenn du nur wenige Datensätze hast und dir das von der Performance her ausreicht, ist ja gut, aber diese Variante ist eigentlich nicht zu empfehlen, wenn man auf Performance achtet, gibt es bessere Varianten (steht auch im verlinkten Thread).
                [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

                Lädt...
                X