2013-05-23 2 views
0

У меня есть сценарий php sql, который генерирует 5 различных значений из базы данных каждый раз, когда он выполняется.
Я хочу, чтобы эти значения tot менялись, говорят один раз в месяц, а не каждый раз, когда запускается скрипт.php и sql random values ​​

Мой код:

$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 "<center>".$row['emri']." ".$row['mbiemri']."</center>"; 
} 

Может кто-нибудь мне помочь?

ответ

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

должно предоставлять вам различное случайное число каждый месяц. Аргумент для функции rand rand( ... ) - это семя. Это значение делает возвращаемое случайное значение одним и тем же рядом, если семя совпадает. То, как я писал это, делает семя одинаковым каждый месяц. (например, в этом месяце 201305)

+0

спасибо вам за nl-x, похоже, работает –

0

Сохраните текущую дату в базе данных. Каждый раз, когда вы запускаете скрипт, проверяйте, находится ли текущая дата на 30 дней после последней сохраненной даты и выполняется соответствующим образом.

0

Используйте график cronjob, чтобы запланировать выполнение сценария, выбирающего случайные данные в начале месяца (0 0 1 * *), и вставить эти данные либо в отдельную таблицу, либо сохранить ее во внутреннем кеше.

Кроме того, вы должны использовать array_rand со стороны PHP, чтобы рандомизировать в большинстве случаев, order by rand() - это хак, который точно не гарантирует, что он будет работать навсегда (хотя это, вероятно, будет, потому что это часто злоупотребляли).

+0

спасибо за ответ, но если я установил cronjob, если я выполняю сценарий только один раз в указанное время или каждый раз, когда я обновляю эту страницу за раз, это покажет мне разные результаты? –

0

Как часто будет запускаться сценарий?

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

0

вы можете сделать файл crontab на своем сервере для выполнения сценария «в это время в эту дату». См. Справочную страницу here. Возможно, ваш сервер также может использовать anacrontab.

1
$sql = "SELECT * FROM table ORDER BY RAND(FLOOR(UNIX_TIMESTAMP()/2592000)) LIMIT 5"; 

Пояснение: если дать функцию рандов начальное число (целое число, параметр), он создает специфическую последовательность (например, RAND (3) всегда создает ту же самую последовательность). Приведенный выше код дает разные семена каждые 30 дней:

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

2592000: количество секунд, в течение 30 дней

FLOOR: конвертировать в целое число

+0

+1 очень умный и хорошо объясненный –

+0

Спасибо, даган, похоже, это трюк. –