Sp33dy G0nz4l3s: Artikel des Tages

Hi,
ich würde gerne einen Code machen, mit dem jeden Tag ein anderer Artikel aus meiner Datenbank ausgewählt wird. Dieser Artikel soll dann der Artikel des Tages sein.

Ein sehr gutes Beispiel ist Wikipedia die haben auch so eine Funktion. Wisst ihr wie man so etwas macht?

Hoffe ihr könnt mir weiterhelfen.
MfG Marc

  1. echo $begrüßung;

    ich würde gerne einen Code machen, mit dem jeden Tag ein anderer Artikel aus meiner Datenbank ausgewählt wird. Dieser Artikel soll dann der Artikel des Tages sein.

    Ein sehr gutes Beispiel ist Wikipedia die haben auch so eine Funktion. Wisst ihr wie man so etwas macht?

    Woran scheitern deine Überlegungen bisher? An der Auswahl des Artikels? Soll er von dir/jemandem vorgegeben oder per Zufall ermittelt werden? Oder ist dein Problem, die Auswahl den Tag über konstant zu halten?

    echo "$verabschiedung $name";

    1. Danke für die vielen Antworten.

      Der Artikel soll per Zufall ausgewählt werden. Da alle Artikel qualitativ gut sind ist es egal welcher ausgewählt wird.

      Ja, der Artikel soll über den Tag konstant gehalten werden. Und das ist mein Problem. Wisst ihr wie man so etwas hinbekommen kann?

      Danke

      1. Hallo,

        Der Artikel soll per Zufall ausgewählt werden. [...] der Artikel soll über den Tag konstant gehalten werden. Und das ist mein Problem. Wisst ihr wie man so etwas hinbekommen kann?

        nur so vom Prinzip her:

        * Speichere irgendwo (Textdatei, Datenbank) ein Datum und etwas, womit
          du den Artikel identifizierst (Datenbankindex, URL, lokaler Pfad).
        * Prüfe bei jedem Zugriff: Aktuelles Datum gleich gespeichertes Datum?
        * Falls ja:   Gib den Artikel aus, dessen Index du gespeichert hast
        * Falls nein: Ermittle einen Artikel per Zufall und speichere dessen Index
          sowie das aktuelle Datum, und gib den ermittelten Artikel aus.

        Ist doch gar nicht so kompliziert, oder?

        Schönen Sonntag noch,
         Martin

        --
        Einer aktuellen Erhebung zufolge sind zehn von neun Ehefrauen eifersüchtig auf ihren Mann.
        1. Hi!

          * Speichere irgendwo (Textdatei, Datenbank) ein Datum und etwas, womit
            du den Artikel identifizierst (Datenbankindex, URL, lokaler Pfad).
          * Prüfe bei jedem Zugriff: Aktuelles Datum gleich gespeichertes Datum?
          * Falls ja:   Gib den Artikel aus, dessen Index du gespeichert hast
          * Falls nein: Ermittle einen Artikel per Zufall und speichere dessen Index
            sowie das aktuelle Datum, und gib den ermittelten Artikel aus.

          Wenn nicht allzuviele Artikel in der DB vorhanden sein sollten, dann würde ich auch immer die Artikel-ID des vorherigen Tages speichern und eine zusätzliche Abfrage einbauen, so daß es nicht vorkommt, daß ein Artikel am nächsten Tag erneut wieder ausgewählt wird.

          Schöner Gruß,
          rob

      2. Hallo Sp33dy G0nz4l3s,

        Ja, der Artikel soll über den Tag konstant gehalten werden. Und das ist mein Problem. Wisst ihr wie man so etwas hinbekommen kann?

        Wenn du eine Datenbank verwendest ist das ganz einfach:

          
        SELECT * FROM tab ORDER BY [link:http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand@title=rand]([link:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_curdate@title=curdate]()) LIMIT 1  
        
        

        Grüße
        Jasmin

        1. echo $begrüßung;

          Wenn du eine Datenbank verwendest ist das ganz einfach:

          SELECT * FROM tab ORDER BY link:http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand@title=rand LIMIT 1

            
          Das wollte ich auch schon vorschlagen, doch bei meinen Versuchen lieferte RAND(CURRENT\_DATE) (für konstante Werte von CURRENT\_DATE) immer das gleiche Ergebnis. Wenn jedoch bei einem Vergleich immer wieder die gleichen Werte verglichen werden, wie soll da eine Reihenfolge entstehen (von der man dann den ersten Datensatz nehmen könnte)?  
            
            
          echo "$verabschiedung $name";
          
          1. Hallo dedlfix,

            »» »» SELECT * FROM tab ORDER BY [link:http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_rand@title=rand]([link:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_curdate@title=curdate]()) LIMIT 1

            Das wollte ich auch schon vorschlagen, doch bei meinen Versuchen lieferte RAND(CURRENT_DATE) (für konstante Werte von CURRENT_DATE) immer das gleiche Ergebnis.

            Das wird ja gerade gewünscht.

            Wenn jedoch bei einem Vergleich immer wieder die gleichen Werte verglichen werden, wie soll da eine Reihenfolge entstehen (von der man dann den ersten Datensatz nehmen könnte)?

            Gute Frage. Für Mysql:
            Ich habe meine Anfrage getestet und sie funktioniert meiner Meinung nach auch wie gewünscht.
            SELECT * FROM tab ORDER BY curdate() liefert tatsächlich keine zufällige Verteilung, obwohl rand(curdate()) auch nur eine konstante Zahl zurück liefert (heute bei mir 0.7713711753221), genau wie curdate() (heute 20070626).
            Vielleicht hilft Mysql bei solchen Anfragen einfach ein bisschen nach, um eine möglichst einfache Realisierung des Problems zu ermöglichen.

            Grüße
            Jasmin

  2. Hallo,

    Das kommt ganz drauf an, ob du einen Zufallsgenerierten Artikel haben willst, oder einen, der nach "Güteklasse" oder Zeitpunkt gewählt ist.

    Bei einem Zufallsgenerator gibst du jedem DB-Eintrag eine Indexnummer und bastelst dir dann auf deiner Seite einen Zufallszahlgenerator, der dann eine Query (z.b. so: SELECT * FROM tabelle WHERE INDEX = $zufall)

    MfG

    Mein Selfcode: ie:% br: fl:{ va:{ ls:& fo:| rl:( n4:( de:> ss:{ ch:? js:{ mo:| sh:( zu:{

    Mein Tipp: Opera verwenden, nicht den Bugbrowser(IE) oder FF!!

    1. Hi,

      Bei einem Zufallsgenerator gibst du jedem DB-Eintrag eine Indexnummer und bastelst dir dann auf deiner Seite einen Zufallszahlgenerator, der dann eine Query (z.b. so: SELECT * FROM tabelle WHERE INDEX = $zufall)

      Das geht auch anders:
      http://forum.de.selfhtml.org/archiv/2005/7/t111558/

      Jonas

    2. Mein Tipp: Opera verwenden, nicht den Bugbrowser(IE) oder FF!!

      War
        Opera verwenden, nicht die Bugbrowser(IE) oder FF!!
      oder
        Opera verwenden, nicht den Bugbrowser(IE), oder FF!!
      gemeint
      ?

      1. Hallo,

        War
          Opera verwenden, nicht die Bugbrowser(IE) oder FF!!
        oder
          Opera verwenden, nicht den Bugbrowser(IE), oder FF!!
        gemeint
        ?

        Weder noch, es sollte heißen:

        Opera verwenden, nicht die Bugbrowser(IE oder FF)!!

        Ciao,
         Martin

        --
        Lebensmotto der Egoisten:
        Was ist so schlimm daran, dass jeder nur an sich selbst denkt? Dann ist doch an alle gedacht!
  3. Nein, ich glaube Wikipedia hat nicht so eine Funktion, die machen das von Hand.

    Du könntest per Zufall einen Artikel aussuchen...
    Aber der Artikel sollte ja auch ein "Aushängeschild" sein, d.h. es sollte eher nicht zuffälig sein.
    Da aber der Server nicht weiß, welcher Artikel gut ist, musst du ihn wohl gewzwungenermaßen selber einstellen... Ihn vllt. in einer Config-Datei festlegen oder so.

    gruß

  4. Hi

    ich weiß jetzt nicht, inwiefern du Zugriff auf den Server hast. Aber ich habe in meinem Projekt (das ich jetzt eingestellt habe) mit einem Cronjob, der täglich um 00:00:01 Uhr anlief, eine Zufallszahl erstellt. Und in dem Datensatz, der in der Tabelle im Feld "ID" diese Nummer hat, habe ich in einem separatem Feld namens "aotd" ein "j" gesetzt (SET aotd='j' WHERE id='[code lang=php]$zufall'[/code]). (AOTD = Article of the Day).

    Das hat funktioniert. Ist aber komplizierter als man denk, denn folgendes Problem trat auf:

    Der Zufallsgenerator hat die Zahl 75.421 generiert - und ich habe nur Artikel bis 125 gehabt. Natürlich hat dann kein Datensatz das "j" bekommen, und auf der Startseite stand dann "Unable to jump to row 1 in ...".
    Lösung: Die Anzahl meiner Datensätze ausgelesen ("SELECT count(*) FROM tabelle") und meinen Zufallsgenerator gesagt, die Zufallszahl soll kleiner oder gleich diese Zahl sein.
    Und schon war das Problem gelöst.

    Wie gesagt, ich weiß nicht, ob du Cronjobs verwenden kannst. Müsstest dich evtl ein bisschen einlesen, aber lass dich davon nicht abschrecken.

    MfG
    Sev

  5. ich würde gerne einen Code machen, mit dem jeden Tag ein anderer Artikel aus meiner Datenbank ausgewählt wird. Dieser Artikel soll dann der Artikel des Tages sein.

    Ein sehr gutes Beispiel ist Wikipedia die haben auch so eine Funktion. Wisst ihr wie man so etwas macht?

    Nun, Voraussetzungen:

    • mehrere Artikel (> 100 ?)
    • ein Artikel, der bestimmte Voraussetzungen erfüllt (Aktualität, Qualität bspw.) um als "Mitarbeiter des Tages" in Frage zu kommen
    • eine Datenbasis, am besten ein RDBMS
    • eine Datentabelle "Artikel", die entweder alle Artikel incl. Indexdaten oder nur die Indexdaten enthält (die dann bspw. auf Ressourcen des FS zeigen)
    • eine Auswahllogik (die m.E. menschlicher Art sein sollte)
    • eine Logik, die nach erfolgter Auswahl den "Mitarbeiter des Tages" bspw. auf der Startseite entsprechend präsentiert

    Mir deucht, dass Du vielleicht eher an dem Feature "zufälliger Artikel" interessiert bist, der ebenfalls von Wikipedia kommt.

    Dann müsstest Du einfach einen Artikel auslosen ("SELECT id ORDER BY RAND()" oder so ähnlich), willst Du tatsächlich einen zufälllig ausgelosten "Mitarbeiter des Tages", dann trage dafür Sorge, dass der erste zufällig ausgeloste Artikel des Tages persistiert wird, also eine "ID_MAdT" (incl. Zeitstempel) irgendwo gespeichert wird.