Zufallsausgabe 1x am Tag

asmodis!

Mitglied
Hi Leutz,

folgende Situation, ich hab einige Sprüche in meiner Datenbank, und jeden Tag soll ein anderer auf der Startseite erscheinen. Damit aber nicht an jedem 1. der gleiche Spruch erscheint, will ich am Anfang des Tages einen Spruch per Zufall auswählen, der aber dann den ganzen Tag auf der Startseite steht. Am nächsten Tag soll dann der nächste Spruch kommen.

wie realisier ich des?

thx schon mal im Voraus
asmo
 
ich würd das so machen:

1. leg in der datenbank eine neue tabelle mit zwei feldern an:
Code:
CREATE TABLE hilfstabelle_sprueche
(
  spruch_id int(4),
  datum date,
  primary key(spruch_id)
);

2. prüf beim seitenaufruf, ob das aktuelle datum mit dem im feld hilfstabelle_sprueche.datum identisch ist.

2a. wenn das nicht übereinstimmt, dann bestimm einfach eine zufallszahl und schreib diese zahl in das feld spruch_id.

2b. wenn das aktuelle datum mit dem in der tabelle übereinstimmt, nimmst du dir den wert aus spruch_id und machst damit eine auswahlabfrage mit bedingung:
Code:
SELECT * FROM sprueche WHERE sprueche.id = hilfstabelle_sprueche.spruch_id;

sollte eigentlich klappen. du musst halt nur darauf achten, dass in der hilfstabelle immer nur ein einziger datensatz steht.
 
nur mal ne kelien frage:

wenn doch sowieso das ganze "nur" jeden tag wechselt und nicht an zwei tagen hintereinander dasselbe komen woll, warum machst du nicht einfach eine reihenfolge und lässt die dann abspielen?!?!?!?

----irgendwie komisch------

//bad taste
 
Soll so funzen:

1.ich trag nen Spruch in ein Formularfeld ein und schon isser in der Rotation.(weiss ich wies geht)

2. ich kann mir alle Sprüche auflisten lassen und hab dahinter nen Button "editieren" und nen Button "löschen" (weiss ich auch wies geht)

3.jeden Tag soll ein anderer Spruch auf der Startseite stehen, entweder per Zufall, oder alle Sprüche der Reihe nach und dann wieder von Vorn. (weiss ich leider net)



wie soll ich das dann lösen? deine Idee wär natürlich auch net schlecht, aber die Sprüche werden ja geändert, deshalb kann ich mich nicht darauf verlassen das ich ne durchgehende ID hab, es werden ja auch manchmal sprüche gelöscht...also funktionierts schon mal nicht mit Tag=ID, hast du ne Idee bad?
 
Zuletzt bearbeitet:
hmm also die einfachste lösuing (wenn man ne feste reihenfolge haben will, wäre denen nummern zu geben......

d.h. du fügst dann eine spalte an, so was wie orderx (darf nicht order heissen, wegen mysql-befehl) oder halt reihenfole....
das machst als int und dann kannst du in "admin-bereich" einfach ne nummer eintragen.......(das weiste je wies geht)

dann legt man einfach fest, dass z.b. heute alles anfängt mit dem ersten in der reihe und dann kommt der nächste in der reiche und so weiter und so weiter.........

also kleines skript zur ausgabe:

also im skript hammer erst mal ne datei mit dem dateline von heute........(wo alles anfangen soll)......im moment wäre das 1025081412
so nun bracuhen wir eigendlich nur zwei dinge.......
eine kleine funtion, die uns bestimmt, wie viele tage seit heute (also seit 1025081412) vergangen sind........(die kommt dann nachher und heisst days_between($damels,$spaeter))
wenn wir die haben, nehmen wir die den rest aus der division aller tage durch die anzahl der sprüche
also einfach:
PHP:
  $damals = 1025081412;
  $tage = days_between($damals,time());
  $result = mysql_query('select count(*) as lala from sprueche');
  $sprueche_ges = mysql_result($result,0,'lala'); //anzahl aller sprüche
  $rest = $tage%$sprueche_ges; //das % entspricht in etwa dem modulo der mathematik bzw. in diversen programmiersprachen (z.b. in java mod)
nun müssen wir den "$rest.ten" spruch aus der lsite auswählen.....
dazu eine ganz einfach query:
PHP:
  $result = mysql_query('select * from sprueche limit '.$rest.',1 order by orderx');
  $row = mysql_fetch_array($result);

und jetzt haben wir unseren spruch:)

so und jetzt zu der funktion days_between($damels,$spaeter):
PHP:
  function days_between($damals,$spaeter){ //$damals und $spaeter sind unix-timestamps (also ints)
    $hour = date('G',$damals);
    $min = date('i',$damals);
    $sec = date('s',$damals);
    $mitternacht_damals = $damals - ($hour*3600 + $min*60 + $sec);
    $hour = date('G',$spaeter);
    $min = date('i',$spaeter);
    $sec = date('s',$spaeter);
    $mitternacht_spaeter = $spaeter - ($hour*3600 + $min*60 + $sec);
    $secs_between = $mitternacht_spaeter - $mitternacht_damals;
    $days_between = $secs_between/86400;
    return $days_between;
}

so.....
die funktion muss im quellcode natürlich vorher stehn....:)

also ich hoffe mal, das alles so funzt, wie ich es geschrieben hab...
habs nähmlcih nur schnell runntergeschrieben.....
schreibfehlund und ähliches seien mir verziehen, genauso wie die sache, dass ich keine lust habe alles nioch mla auf fehler durchzusehen:)

//bad taste
 

Neue Beiträge

Zurück