产品表中有大约10,000种产品。我想检索其中一个项目并将其显示在网页的一个部分中,该部分在特定日期保持不变。像“今日产品”这样的东西。
例如,如果今天我得到product_id 100,那么今天所有访问者都应该查看此产品项目。明天它可以获取任何随机有效的主键,比如1289,访客明天全天获得1289个产品。
有任何想法/建议吗?
感谢您的帮助。
答案 0 :(得分:3)
SELECT id
FROM products
ORDER BY
RAND(UNIX_TIMESTAMP(CURRENT_DATE()))
LIMIT 1
答案 1 :(得分:2)
如何在午夜创建缓存文件并使其无效?
这样做的好处是,您不会对数据库进行不必要的调用,因为您只检查缓存文件的时间戳 - 每天只有一次数据库请求填充新的缓存文件。
您不需要CRON作业:
if(date_of_file(potd_cache_file) != today){
potd_cache_file = generate_from_db();
}
load_file(potd_cache_file);
这意味着只有当天第一位访问您网站的访问者才会触发重新生成,并且每个后续访问者都会向他们提供快速加载缓存文件。
答案 2 :(得分:2)
也许您可以将当天项目的ID存储在数据库的表中?
答案 3 :(得分:2)
这个想法非常简单,
它不是一个复杂的操作。
答案 4 :(得分:1)
SELECT id
FROM products
ORDER BY (id + RAND(UNIX_TIMESTAMP(CURRENT_DATE()))) MOD some_reasonable_value
LIMIT 1
答案 5 :(得分:0)
您可以使用种子值启动随机数生成器。
将种子值设为当天(21日)+月(10)+年(2009),所以今天的种子是2041年。
你将整天获得相同的随机数,明天则是另一个。这更像是在.net中运行的方式。随机函数采用最大值和最小值(这是您的最小和最大ID值),然后是可选的种子值并返回一个数字。对于相同的种子编号,您将获得相同的随机数。如果更改最大值和最小值,则可能会影响生成的数量。你必须查看php是如何工作的。
答案 6 :(得分:0)
total = SELECT COUNT(id) FROM products;
day_product = SELECT id FROM products WHERE id = (UNIX_TIMESTAMP(CURRENT_DATE()) MOD total) LIMIT 1;