Autor Zpráva
Jimmy Hayek
Profil
Ahoj,
potřeboval bych poradit, jak vypsat náhodný článek. Nechci ale, aby se vypsal po každém načtení nový, ale aby byl náhodný pouze pro daný den. To znamená, aby se po celý den vvypisoval nějaký článek a další den zase jiný. V podstatě by se měl ten náhodný článek nějakým způsobem vypočítat z data. Získat náhodné číslo pro daný den není pro mě zas takový problém, ale jak zařídit, aby to náhodné číslo dne odpovídalo nějakému ID článku?
Děkuji předem za odpověď, či jakoukoliv pomoc...

P.S. Potřebuji řešení bez zápisu náhodného čísla do databáze...
Mastodont
Profil
Co třeba nějaký plugin?
http://wasabi.pbworks.com/Random%20Posts%20and%20Random%20Excerpts
Jimmy Hayek
Profil
Mastodont
Ano, díval jsem se už na nějaké pluginy (a tento není výjimkou), ale ty dělají přesně to, co nechci — náhodný článek se mění při každém načtení stránky.
Já vlastně ani nepotřebuji využívat random funkci... jen potřebuji poradit algoritmus (či jak to nazvat) pro výpočet unikátního čísla dne z jeho data, podle kterého by se vypsal nějaký článek. Zkusím to prakticky ukázat:

Dnes máme 2. 8. 2009. Z tohoto data získám proměnné x, y, z:
x = 2
y = 8
z = 2009
Následně proběhne nějaký výpočet z těchto proměnných, například dnes by vyšlo:
((x * z) / y) / ((x * y) - (2*x+1)) = 45,65909091 ≈ 46

Zítra by vyšlo zase číslo: 44
Pozítří by vyšlo opět 44
Popozítří: 43

Tenhle příklad jsem pouze z hlavy vymyslel a jde vidět, že není zrovna nejlepší (čísla například klesají). Potřeboval bych prostě vymyslet příklad, který by vyhazoval každý den více odlišná čísla ( 2, 157, 46, 91, 17, ...) a zároveň aby nějakým způsobem to dané číslo mohlo vybrat článek z databáze.
Bubák
Profil
Koukni na tohle:
(Soubor jsem smazal)
Udělal jsem v tabulkáči pár výpočtů, abych dostal desetinné "hausnumero", z toho jsem ponechal desetinnou část, tím jsem dostal pseudonáhodné číslo v rozsahu 0-1. Ostatní je klasika.
Jimmy Hayek
Profil
Tak jsem to nakonec vyřešil takto:

Nejprve dotazem na databázi zjistím, kolik je v ní publikovaných článků.
Poté pomocí takovéhoto algoritmu vygeneruju unikátní číslo pro daný den (proměnná $p je počet článků v databázi):

function datum_alg($d, $m, $r, $p) {
return ((((($d^32)*($m^13)*$r)) - ($r/$m+$d)) * ($d/$m+$d))%$p ;
}


A nakonec vypíšu z databáze díky LIMIT $uni, 1 jeden článek, kde $uni je ono vygenerované unikátní číslo...

Tak třeba se to někomu bude v budoucnu hodit. :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: