Ankündigung

Einklappen
Keine Ankündigung bisher.

Maximal n Datensätze pro Benutzer zurückgeben

Einklappen

Neue Werbung 2019

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

  • Maximal n Datensätze pro Benutzer zurückgeben

    In einer Fotogalerie können verschiedene Benutzer beliebig viele Bilder hochladen. Jedem Bild kann eine Kategorie zugeordnet werden.

    Die dazugehörige mySQL-Tabelle hat folgende Struktur:

    fotos.ID Eindeutige ID des Bildes.
    fotos.BenutzerID ID des Benutzers.
    fotos.Kategorie Name der Kategorie.
    fotos.Zeitstempel Zeit, wann dieses Bild zuletzt angezeigt wurde.
    fotos.Url Url des Bildes.

    Bei der Auswahl einer Kategorie werden die Bilder in Abhängigkeit der Zeitstempel sortiert ausgegeben. Die Zeitstempel werden an anderer Stelle regelmäßig geändert. Dadruch werden immer andere Bilder angezeigt.

    Die mySQL-Abfrage für 40 Bilder der Kategorie 'Landschaft' sieht beispielsweise wie folgt aus:

    SELECT * FROM fotos
    WHERE fotos.Kategorie = 'Landschaft'
    ORDER BY fotos.Zeitstempel ASC
    LIMIT 40

    Das funktioniert so weit auch - bis auf folgendes Problem:
    Bei obiger Abfrage kommt es vor, dass von einem Benutzer mehrere Bilder ausgegeben werden. Ich möchte aber pro Benutzer maximal 1 oder 2 Bilder angezeigt bekommen.

    Und an dieser Stelle komme ich nicht weiter und benötige Hilfe.
    Bei maximal einem Bild und Verwendung von 'GROUP BY fotos.BenutzerID' erhalte ich stets dasselbe Bild zum jeweiligen Kunden aber nicht das Bild mit dem ältesten Zeitstempel.
    Bei der Filterung nach maximal zwei Bildern je Benutzer wird es für mich noch komplizierter.

    Auf der Suche nach einer Lösung bin ich auf ähnliche Anfragen gestoßen, allerdings betrafen die immer zwei getrennte Tabellen. Die Umsetzung auf eine einzige Tabelle habe ich leider nicht hinbekommen.

    Für mögliche Lösungsvorschläge bedanke ich mich schon jetzt recht herzlich.

  • #2
    eine mögliche Lösung wäre die Verwendung von Window-Funktionen - die MySQL nicht kann. Bei nur einem Bild und dem ältesten Timestamp kannst Du aber mit aggregation (max() ) und Gruppierung arbeiten.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      @akretschmer Danke für die rasche Antwort.
      Windows-Funktionen bringen mich nicht wirklich weiter. Wie eingangs erwähnt, scheinen sich MAX() und GROUP BY nicht zu vertragen. Da wird immer nur derselbe Bild ausgeworfen, aber nicht das mit dem ältesten Zeitstempel.

      Kommentar


      • #4
        Bei MySQL wird das Stichwort dann wohl Subquery lauten. Verschachtle mehrere Queries, bis du das richtige Resultat hast.
        [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

        Kommentar


        • #5
          Vielen Dank für den Tipp mit den Subquery. Ich werde mich da wohl einarbeiten müssen.

          Kommentar

          Lädt...
          X