PHP і SQL выпадковыя значэння

У мяне ёсць PHP SQL скрыпт, які генеруе 5 розных значэнняў з базы дадзеных кожны раз, што ён выконвае.
Я хачу, каб гэтыя змены значэння карапуза дазваляе казаць адзін раз у месяц, а не кожны раз, калі запускаецца скрыпт.

<�Б> Мой код:

$sql = "SELECT * FROM table ORDER BY RAND() LIMIT 5";
$query = mysql_query ($sql, $connection) or die (mysql_error()); 
while(($row = mysql_fetch_assoc ($query))){ 
    echo "
".$row['emri']." ".$row['mbiemri']."
";
}

Можа хто-небудзь мне дапамагчы?

0

6 адказы

rand(year(now())*100+month(now()))

павінна даць вам іншае выпадковае лік кожны месяц. Аргумент для функцыі рандаў рандаў ( ... ) з'яўляецца семем. Гэта значэнне робіць якое вяртаецца выпадковае значэнне будзе той жа серыі, калі насеньне адно і тое ж. Тое, як я напісаў, што робіць насеньне быць такім жа кожны месяц. (Напрыклад, у гэтым месяцы 201305)

2
дададзена
дзякуй вам НЛ-х, здаецца, працуе на
дададзена аўтар Albion Bame, крыніца
$sql = "SELECT * FROM table ORDER BY RAND(FLOOR(UNIX_TIMESTAMP()/2592000)) LIMIT 5";

Тлумачэнне: калі даць Rand функцыянаваць пачатковую колькасць (цэлы лік параметру) стварае спецыфічную паслядоўнасць (напрыклад, RAND (3) заўсёды стварае тую ж самую паслядоўнасць). Над код дае розныя насенне кожныя 30 дзён:

UNIX_TIMESTAMP (): вяртае секунды з моманту '1970-01-01 00:00:00' UTC

2592000: колькасць секунд, на працягу 30 дзён

КРЫССЯ: пераўтварыць у цэлы лік

1
дададзена
+1 вельмі разумны і добра растлумачана
дададзена аўтар Carlos Campderrós, крыніца
Дзякуючы daghan, гэта, здаецца, зрабіць трук.
дададзена аўтар Albion Bame, крыніца

Захавайце бягучую дату ў базе дадзеных. Кожны раз, калі вы запускаеце скрыпт праверыць, ці з'яўляецца бягучая дата 30 дзён за межамі апошняй запісанай даты і выканаць адпаведна.

0
дададзена

Выкарыстоўвайце cronjob запланаваць сцэнар выбару выпадковых дадзеных на першым з месяца ( 0 0 1 * * ), і ўставіць гэтыя дадзеныя альбо ў асобнай табліцы, або захоўваць яго ва ўнутраным кэшы.

Акрамя таго, вы павінны выкарыстоўваць array_rand на баку PHP для рандомизации у большасці выпадкаў, Заказ па рандаў() хак, які дакладна не гарантавана, каб працягваць працаваць вечна (хоць гэта, верагодна, таму, што ён быў паніжаны так часта).

0
дададзена
дзякуй за адказ, але калі я ўсталяваць cronjob, калі я гэта скрыпт запускаецца толькі адзін раз у паказаны час, або кожны раз я абнавіць гэтую старонку ў інтэрвале ён пакажа мне розныя вынікі?
дададзена аўтар Albion Bame, крыніца

Вы можаце зрабіць кронтаб файл на сэрвэры для выканання сцэнару «у гэты час на гэтую дату». Глядзіце старонку дапамогі . Можа быць ваш сервер можа таксама выкарыстоўваць anacrontab .

0
дададзена

Як часта сцэнар будзе працаваць?

Калі гэта будзе ТОЛЬКІ працаваць, калі вы хочаце змяніць значэнне, то вам неабходна наладзіць cronjob, які будзе выконвацца адзін раз у месяц.

0
дададзена