Lynky: My-SQL-Query-Problem mit Max()

Hallo,
Ich habe ein Problem mit der Max()-Funktion. Ich möchte aus einer Datenbank dasjenige Bild auswählen, dass als Letztes hochgeladen wurde (Feld "erzeugt" ist Timestamp).

SELECT pilzdat_pilze_bilddateien.bild_num,
       pilzdat_pilze.PILZ_ID,
       pilzdat_pilze.name_lat,
       pilzdat_gattungen.lat_gattname

FROM pilzdat\_pilze\_bilddateien,
     pilzdat\_pilze,
     pilzdat\_gattungen

WHERE pilzdat_pilze_bilddateien.PILZ_ID=pilzdat_pilze.PILZ_ID
  AND pilzdat_pilze.gatt_code=pilzdat_gattungen.gatt_code

HAVING Max(pilzdat_pilze_bilddateien.erzeugt)

Als Ergebnis erhalte ich ÜBERHAUPT NIX. Warum das??

Ich hoffe, die seltsame Namensgebung verwirrt nicht zu sehr ;)
Ich danke für jede Hilfe!

Grüsse,

Lynky

  1. HAVING Max(pilzdat_pilze_bilddateien.erzeugt)

    Hallo,

    leider bin ich mit der funktion von HAVING nicht so vertraut, deswegen würde ich dir folgendes vorschlagen:
    SELECT max(erzeugt) AS letztes, ...., WHERE erzeugt=letztes AND .... LIMIT 1

    das könnte, wenn ich mich nicht irre so funktionieren, wie du es haben willst

    mfg,
    steffen

    1. Hallo,
      hab' jetzt folgendes Statement:

      SELECT pilzdat_pilze_bilddateien.bild_num,
             pilzdat_pilze.PILZ_ID,
             pilzdat_pilze.name_lat,
             pilzdat_gattungen.lat_gattname
             Max(pilzdat_pilze_bilddateien.erzeugt) AS Datum

      FROM pilzdat\_pilze\_bilddateien,
           pilzdat\_pilze,
           pilzdat\_gattungen

      WHERE pilzdat_pilze_bilddateien.erzeugt=Datum
        AND pilzdat_pilze_bilddateien.PILZ_ID=pilzdat_pilze.PILZ_ID
        AND pilzdat_pilze.gatt_code=pilzdat_gattungen.gatt_code

      HAVING Max(pilzdat_pilze_bilddateien.erzeugt)

      MySQL meldet mir aber einen Syntaxfehler in Linie 5.
      Grrrrr.
      Was nu?

      Lynky

      1. Natürlich musst du das so machen, wie es Tobias K. beschrieben hat! ich depp ;-)
        ein LIMIT 1 dahinter und du bekommst den neuesten datensatz.

        was willst du immer mit deinem HAVING? willst du die funktion ausprobieren oder was?

        mfg,
        steffen

      2. Hallo,
        hab' jetzt folgendes Statement:

        SELECT pilzdat_pilze_bilddateien.bild_num,
               pilzdat_pilze.PILZ_ID,
               pilzdat_pilze.name_lat,
               pilzdat_gattungen.lat_gattname
               Max(pilzdat_pilze_bilddateien.erzeugt) AS Datum

        FROM pilzdat\_pilze\_bilddateien,
             pilzdat\_pilze,
             pilzdat\_gattungen

        WHERE pilzdat_pilze_bilddateien.erzeugt=Datum
          AND pilzdat_pilze_bilddateien.PILZ_ID=pilzdat_pilze.PILZ_ID
          AND pilzdat_pilze.gatt_code=pilzdat_gattungen.gatt_code

        HAVING Max(pilzdat_pilze_bilddateien.erzeugt)

        MySQL meldet mir aber einen Syntaxfehler in Linie 5.
        Grrrrr.
        Was nu?

        das Komma nach pilzdat_gattungen.lat_gattname
        fehlt

        Christian

    2. Hi,

      leider bin ich mit der funktion von HAVING nicht so vertraut, deswegen würde ich dir folgendes vorschlagen:

      HAVING ist keine Funktion.

      Es ist eigentlich genau dasselbe wie WHERE, nur das man auf im String vereinbarte Variablen zurückgreifen kann.

      Bsp:

      SELECT id AS nummer FROM table WHERE nummer = 3

      --> Fehler, Spalte nummer ist unbekannt

      SELECT id AS nummer FROM table HAVING nummer = 3
      --> kein Fehler

      Gruß
      Christian

      1. leider bin ich mit der funktion von HAVING nicht so vertraut, deswegen würde ich dir folgendes vorschlagen:
        HAVING ist keine Funktion.

        hallo,

        das habe ich auch nie behauptet. "mit der funktion von HAVING" -> funktoin VON - und nicht mit der "funktion HAVING".

        aber nichts für ungut,
        steffen

  2. Hallo Lynky,

    HAVING Max(pilzdat_pilze_bilddateien.erzeugt)

    warum sortierst du nicht einfach nach erzeugt (ORDER BY erzeugt DESC) und nimmst dann die erste Zeile (LIMIT 0,1)?

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. *ggg*

      Halt mich für penibel, aber das ist nicht elegant und neugierig bin ich ja auch ;)
      Es muss doch auch eine Möglichkeit geben, das so zu lösen.

      Grüsse,

      Lynky

  3. Vielen Dank, liebe Leute.

    Ich hab jetzt eingesehen, daß das mit dem Having nich so richtig der Hit war und mich für Tobis Lösung entschieden :)

    Lynky