split.s: mysql: neusten Datensatz aus zweiter Tabelle anzeigen

Ich habe folgendes Problem:

Es gibt zwei Tabellen: Benutzer, Fotos

Jetzt möchte ich alle Benutzer anzeigen und jeweils das aktuellste Foto.
Mein Problem: Ich könnte natürlich jetzt einfach MAX(fotos.id) machen, aber das Problem ist, dass ich 9 Spalten aus der Fotos-Tabelle brauche was ja mit MAX() nicht umsetzbar ist.

Hat jemand von euch ne Idee?

  1. Hat jemand von euch ne Idee?

    JOIN?

    1. Hat jemand von euch ne Idee?

      JOIN?

      wie bekomm ich denn MAX(fotos.id) in den JOIN rüber bzw. umgekehrt?

      1. Hi,  ich matmusse mal über dein Datenbankschema, deshalb gibt es auch nur Pseudo-Code

        selektiere b.*, f.*
        von benutzer b
        join fotos f wo f.benutzer_id = b.benutzer_id
        wo f.id = (selektiere MAX(id) von fotos f2 wo f2.benutzer_id = b.benutzer_id)

        oder in prosa, verbinde die inhalte von benutzer und fotos wo die foto id jeweils der grössten foto id für den benutzer (-> benutzer_id) entspricht, nennt man auch "korrelierende Unterabfrage".

        Cheers, Frank

  2. Hi!

    Jetzt möchte ich alle Benutzer anzeigen und jeweils das aktuellste Foto.
    Ich könnte natürlich jetzt einfach MAX(fotos.id) machen,

    Nö, eine ID identifiziert einen Datensatz. Eine zeitliche Aussage kann ihr nicht entnommen werden. Dafür solltest du lieber ein Feld mit einem Datums- und Zeittypen. Ein TIMESTAMP-Feld bietet sich an, weil du dessen eingebaute Magie, sich selbst auszufüllen, beim Anlegen von Datensätzen nutzen kannst.

    Lo!

  3. Es ist auch nie verkehrt bei Tabellen 2 datumsspalten
    Bdate -> Beginndatum -> heute
    EDate -> Enddatum -> zb. 31.12.4000
    anzulegen.

    Somit hat man einen Gültigkeitsbereich von Datensätzen.
    Wenn man einen Datensatz löscht oder nicht braucht, dann einfach das Edate auf das heutige Datum setzen.

    Würd sich für dein Problem super anbieten.
    Natürlich auch in Verbindung mit Joins.