Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检索随机(但对于日期是唯一的)主键值?_Php_Mysql - Fatal编程技术网

Php 如何检索随机(但对于日期是唯一的)主键值?

Php 如何检索随机(但对于日期是唯一的)主键值?,php,mysql,Php,Mysql,我在产品表中有大约10000种产品。我想检索其中一个项目,并将其显示在网页的某个部分,该部分在特定的一天保持不变。就像今天的产品一样 例如,如果今天我获得了product_id 100,那么所有访问者都应该查看今天的产品项目。明天,它可能会获取任意一个随机有效的主键,比如1289,而访问者明天一整天都会得到1289产品 有什么想法/建议吗 谢谢你的帮助 创建一个缓存文件并在午夜使其失效怎么样 这样做的好处是,您不会对数据库进行不必要的调用,因为您只需检查缓存文件上的时间戳—您每天只会发出一次DB

我在产品表中有大约10000种产品。我想检索其中一个项目,并将其显示在网页的某个部分,该部分在特定的一天保持不变。就像今天的产品一样

例如,如果今天我获得了product_id 100,那么所有访问者都应该查看今天的产品项目。明天,它可能会获取任意一个随机有效的主键,比如1289,而访问者明天一整天都会得到1289产品

有什么想法/建议吗


谢谢你的帮助

创建一个缓存文件并在午夜使其失效怎么样

这样做的好处是,您不会对数据库进行不必要的调用,因为您只需检查缓存文件上的时间戳—您每天只会发出一次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是稀疏的呢?他们不应该出现在电子商务应用程序中,他们应该有一个被删除的标志,而不是被实际删除。