Php 如何检索随机(但对于日期是唯一的)主键值?
我在产品表中有大约10000种产品。我想检索其中一个项目,并将其显示在网页的某个部分,该部分在特定的一天保持不变。就像今天的产品一样 例如,如果今天我获得了product_id 100,那么所有访问者都应该查看今天的产品项目。明天,它可能会获取任意一个随机有效的主键,比如1289,而访问者明天一整天都会得到1289产品 有什么想法/建议吗Php 如何检索随机(但对于日期是唯一的)主键值?,php,mysql,Php,Mysql,我在产品表中有大约10000种产品。我想检索其中一个项目,并将其显示在网页的某个部分,该部分在特定的一天保持不变。就像今天的产品一样 例如,如果今天我获得了product_id 100,那么所有访问者都应该查看今天的产品项目。明天,它可能会获取任意一个随机有效的主键,比如1289,而访问者明天一整天都会得到1289产品 有什么想法/建议吗 谢谢你的帮助 创建一个缓存文件并在午夜使其失效怎么样 这样做的好处是,您不会对数据库进行不必要的调用,因为您只需检查缓存文件上的时间戳—您每天只会发出一次DB
谢谢你的帮助 创建一个缓存文件并在午夜使其失效怎么样 这样做的好处是,您不会对数据库进行不必要的调用,因为您只需检查缓存文件上的时间戳—您每天只会发出一次DB请求来填充新的缓存文件 您不需要CRON作业:
if(date_of_file(potd_cache_file) != today){
potd_cache_file = generate_from_db();
}
load_file(potd_cache_file);
这意味着只有当天第一个访问您网站的访问者才会触发更新,随后的每个访问者都会收到一个快速加载的缓存文件。创建一个缓存文件并在午夜使其失效如何 这样做的好处是,您不会对数据库进行不必要的调用,因为您只需检查缓存文件上的时间戳—您每天只会发出一次DB请求来填充新的缓存文件 您不需要CRON作业:
if(date_of_file(potd_cache_file) != today){
potd_cache_file = generate_from_db();
}
load_file(potd_cache_file);
这意味着只有当天第一个访问您网站的访问者才会触发更新,每个后续访问者都会得到一个快速加载的缓存文件。也许你可以将当天项目的id存储在数据库的一个表中?也许你可以将当天项目的id存储在数据库的一个表中?这个想法非常简单
SELECT id
FROM products
ORDER BY
RAND(UNIX_TIMESTAMP(CURRENT_DATE()))
LIMIT 1
使用产品ID和日期字段设置一个表来调用ProductOfDay
在用户访问时的“当日产品”页面上,检查日期字段
如果是今天的日期,则显示产品
如果不是,则只选择一个新产品并将其保存到现场。
操作没有那么复杂。想法很简单 使用产品ID和日期字段设置一个表来调用ProductOfDay 在用户访问时的“当日产品”页面上,检查日期字段 如果是今天的日期,则显示产品 如果不是,则只选择一个新产品并将其保存到现场。
操作没有那么复杂。您可以使用种子值启动随机数生成器 将种子值设为2009年第21+月10+年,因此今天的种子值为2041
你一整天都会得到相同的随机数,明天会得到不同的随机数。这是它在.net中的工作原理。随机函数取一个max和min值这是您的min和max ID值,然后是一个可选的种子值并返回一个数字。对于相同的种子数,将生成相同的随机数。如果更改最大值和最小值,可能会影响生成的数字。您必须查看php的工作原理。您可以使用种子值启动随机数生成器
total = SELECT COUNT(id) FROM products;
day_product = SELECT id FROM products WHERE id = (UNIX_TIMESTAMP(CURRENT_DATE()) MOD total) LIMIT 1;
将种子值设为2009年第21+月10+年,因此今天的种子值为2041
你一整天都会得到相同的随机数,明天会得到不同的随机数。这是它在.net中的工作原理。随机函数取一个max和min值这是您的min和max ID值,然后是一个可选的种子值并返回一个数字。对于相同的种子数,将生成相同的随机数。如果更改最大值和最小值,可能会影响生成的数字。您必须查看php是如何工作的
total = SELECT COUNT(id) FROM products;
day_product = SELECT id FROM products WHERE id = (UNIX_TIMESTAMP(CURRENT_DATE()) MOD total) LIMIT 1;
另见
另请参见。对不起。。也许我的问题不是很清楚。我想让它显示在网页的某个部分。。类似于当天的项目。所以其他项目可能会不断变化,但这一项在当天保持不变。如果它不能存储在数据库中,我想我也会这样做。有一个id为的可写文件。然后在查看页面时,检查修改日期,如果是昨天,则获取新id并将其存储在文件中,否则在文件中使用该id。日期当然也可以存储在文件中,而不必检查修改日期。您不必缓存整个HTML文件,您可以缓存当天保持静态的部分。@Svish,日期不需要存储在文件中,您只需检查文件的上次修改日期即可。如果是PHP,您可以检查上次修改日期,如果是今天,则包括该文件。如果它比今天旧,请从数据库中获取产品并将其写入文件。对不起。。也许我的问题不是很清楚。我想让它显示在网页的某个部分。。类似于当天的项目。所以其他项目可能会不断变化,但这一项在当天保持不变。如果它不能存储在数据库中,我想我也会这样做。有一个id为的可写文件。然后,在查看页面时,检查修改日期,以及是否
昨天,获取一个新id并将其存储在文件中,否则在文件中使用该id。日期当然也可以存储在文件中,而不必检查修改日期。您不必缓存整个HTML文件,您可以缓存当天保持静态的部分。@Svish,日期不需要存储在文件中,您只需检查文件的上次修改日期即可。如果是PHP,您可以检查上次修改日期,如果是今天,则包括该文件。如果它比现在旧,请从数据库中获取产品并将其写入文件。您到底在问什么?如何选择随机产品标识?如何记住你选择了哪一个?选择一个随机的产品id,我的网站会记住这一天。这是一个SQL问题还是一个PHP问题?你到底在问什么?如何选择随机产品标识?如何记住你选择了哪一个?选择一个随机的产品id,我的网站会记住这一天。这是一个SQL问题还是PHP问题?是的,我可以。但是我需要一个管理员来做这件事,并且每天都要改变。不是真的。如果存在随机项,您只需编写代码供今天使用,否则选择。或者,设置一个cron作业,每天选择一个随机项并将其存储在表中。此外,如果该项缺货,我也必须更新此表。所以我宁愿保持简单。。我发现@Quassnoi的答案对我很有效。是的,我能。但是我需要一个管理员来做这件事,并且每天都要改变。不是真的。如果存在随机项,您只需编写代码供今天使用,否则选择。或者,设置一个cron作业,每天选择一个随机项并将其存储在表中。此外,如果该项缺货,我也必须更新此表。所以我宁愿保持简单。。我发现@Quassnoi的答案对我很有用。+1,我喜欢这个,它让你有“当日产品”的历史记录。+1,我喜欢这个,它让你有“当日产品”的历史记录。如果id很稀少怎么办?它们永远不应该出现在电子商务应用程序中,他们应该有一个被删除的标志,而不是被实际删除。如果id是稀疏的呢?他们不应该出现在电子商务应用程序中,他们应该有一个被删除的标志,而不是被实际删除。