PHP / MySQL帮助 - 随机每日选择?

时间:2010-01-27 12:30:01

标签: php mysql random

我正试图从我的数据库中选择一个可以持续一天(每日选择)的数据。我使用以下代码:

$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);  
}  

然而,我错误地认为我在非对象上使用'has'函数。

4 个答案:

答案 0 :(得分:15)

如果您将兰特的SEED设置为每日更改的整数值,那么这将解决您的问题

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

会做的伎俩。

答案 1 :(得分:5)

这样做的理智方法是自动通过设置为每天运行一次的cron作业生成当天内容的选择。

因此,cron作业将执行您提供的SQL并将相应的内容存储在平面文件/数据库表等中(或者甚至可以将选择的id存储在另一个表中以供将来查找)。

答案 2 :(得分:2)

您可以尝试这样的事情:

$total = 'SELECT COUNT(*) FROM table;';
$query = 'SELECT * FROM table ORDER BY id ASC LIMIT 1 OFFSET ' . (date('Ymd') % $total) . ';';

答案 3 :(得分:0)

我认为您需要使用“today”field = 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");