Справка Php/MySQL - случайный ежедневный выбор?

Я пытаюсь получить выбор от своего DB, который длился бы в течение дня (ежедневный выбор). Я использую следующий код:

$query = 'SELECT * FROM table ORDER BY rand() LIMIT 1

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

Заранее спасибо <3


Я пробую это:

$query = "SELECT * FROM table ORDER BY rand(" . date("Ymd") . ") LIMIT 1";

Но я получаю следующую ошибку: mysql_fetch_assoc (): переданный аргумент не является допустимым ресурсом результата MySQL. Это - часть, которая повреждается:

$results = mysql_query($query); 

while($line = mysql_fetch_assoc($results)) 

Так... это должно быть похожим на это, правильно? (Я имею в виду, выбирая ежедневный случайный выбор?)

$dailyPick = 'SELECT * FROM table ORDER BY rand() LIMIT 1'; 

$cacheKey = 'dailyPick'. date('dmY'); 
if($cache->has($cacheKey)) { 
    $dailyPick = $cache->get($cacheKey); 
} else { 
    // hit database 
    $dailyPick = $cache->save($cacheKey); 
} 

Я пробую это теперь:

$dailyPick = 'SELECT * FROM table ORDER BY rand() LIMIT 1';  

$cacheKey = 'dailyPick'. date('dmY');  
if($cache->has($cacheKey)) {  
    $dailyPick = $cache->get($cacheKey);  
} else {  
    // hit database  
    $dailyPick = $cache->save($cacheKey);  
}  

Однако это получает меня ошибка, которую я использую, 'имеет' функцию на необъекте.

6
задан thkala 10 December 2011 в 09:48
поделиться

4 ответа

Если вы устанавливаете семена для ранга в целочисленное значение, которое ежедневно меняется, это решит вашу проблему

$query = "SELECT * FROM table ORDER BY rand(" . date("Ymd") . ") LIMIT 1";

.

15
ответ дан 8 December 2019 в 05:55
поделиться

Вы можете использовать Boost.random . Он использует другой генератор, чем при условии большинства стандартных библиотек, которые должны быть более надежными.

В конкретных, большинство стандартных библиотек обеспечивают линейные конгруэнтские генераторы, которые не очень хорошо работают, когда вы MOD их результаты с небольшими числами. Boost.random имеет генератор Twister Mersenne.

Как говорит Sharptooth, хотя (хорошее Spenting!), Только семя генератора один раз, в самом начале вашей программы. Высевая его каждый раз, когда вы хотите что-то случайное, является контрпродуктивным.

-121--2786197-

Средства в браке это было бы автоматически генерировать выбор дня, с помощью задания CRON , которая была установлена, чтобы запустить один раз в день.

Как таковое, задание CRON выполнит предоставленную вами SQL, и хранит соответствующее содержимое в плоском таблице файлов / базы данных и т. Д. (Или, возможно, даже просто сохранить выбранный идентификатор в другой таблице для будущих целей поиска).

5
ответ дан 8 December 2019 в 05:55
поделиться

Я думаю, вам нужно будет обновить случайную полученную запись с «сегодня» полем = 1 ..

Что-то вроде этого:

// ------------
// Run this 3 commands once a day

// Reset all records
mysql_query("UPDATE `table` SET `today` = 0");

// Pick one
$sql = mysql_query("SELECT `id` FROM `table` ORDER BY RAND() LIMIT 1");
$id = mysql_result($sql, 0, 'id');

// Update the record
mysql_query("UPDATE `table` SET `today` = 1 WHERE `id` = {$id}");

// ------------

// Now you can find again your "random found record":
$query = mysql_query("SELECT * FROM `table` WHERE `today` = 1");
0
ответ дан 8 December 2019 в 05:55
поделиться

Вы можете попробовать что-то вроде этого:

$total = 'SELECT COUNT(*) FROM table;';
$query = 'SELECT * FROM table ORDER BY id ASC LIMIT 1 OFFSET ' . (date('Ymd') % $total) . ';';
2
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: