Jeden Datensatz nur einmal anzeigen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Jeden Datensatz nur einmal anzeigen

    Hi zusammen!

    Momentan habe ich in einer MySQL-DB knapp 700 Einträge (wächst ständig).

    Ich wähle einen Datensatz per Zufall aus der DB aus und zeige ihn an. Das wiederhole ich bis zu einem Abbruchkriterium oder bis alle 700 Einträge angezeigt wurden.

    Jetzt mein Problem:
    Innerhalb einer Session darf der Benutzer meiner Seite jeden Datensatz nur ein einziges Mal angezeigt bekommen!

    Wie kann ich das mit vernünftigen Antwortzeiten realisieren?

    Idee: Auslesen eines Datensatzes mit ORDER BY RAND()
    1. sessionid und jeden schlüssel des Datensatzes in Tabellen ablegen; nach jedem Random-SELECT überprüfen, ob der Datensatz schon mal gelesen wurde; wenn ja neuen Select, wenn nein Schlüssel in DB eintragen, mit sessionid verknüpfen usw.

    2. jeden Schlüssel eines gelesenen Datensatzes in einen Cookie schreiben. Rest entsprechend wie bei 1

    Hierbei habe ich aber das Problem, dass ich oft mehrfach von DB lesen muss, bis ich wieder einen Datensatz habe, den ich noch nicht angezeigt hatte.
    Zudem bin ich mir nicht sicher, ob das mit der Cookie-Methode bei 700 (und mehr) Schlüsseln vernünftig funktioniert!?!

    Hat irgendjemand eine bessere Idee?

    basser

  • #2
    mit DISTINCT kannst du doppelte Datensätze nur 1x ausgeben lassen, meintest du sowas ??

    gruss

    Comment


    • #3
      Nein, mit DISTINCT komme ich nicht weiter, da in der DB sind alle Datensätze nur einmal vorhanden sind!

      Ich will sicherstellen, dass innerhalb einer PHP-Session der Benutzer jeden Datensatz nur ein einziges Mal angezeigt bekommt, obwohl ich ihn per Zufall aus der DB lese. Ich muss also irgendwo die Schlüssel der Datensätze ablegen, die ich dem Benutzer bereits angezeigt habe!

      basser

      Comment


      • #4
        mh... leg ne extra tabelle an, dort speicherst du die SessionID des Users und legst zusätzlich die ID des Angezeigten Datensatzes ab, so kannst du bei deinem zufälligen Datensatzausgabe gleich noch die bereits angezeigten mit ausschliessen lassen!

        gruss

        Comment


        • #5
          Jau, das müsste funktionieren!

          Danke für die schnelle Antwort!

          Comment


          • #6
            räum beim Beenden der Session am besten noch diese neue Tabelle auf: delete from sessionanzeige where SID=...
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Comment

            Working...
            X