我正在处理的网站提供了一项服务,只有会员才能获得对内容的完全访问权限。我试图在主页上创建一个“样本”,每天获取新的mysql数据(通常只供会员使用),并为所有用户提供网站提供的“免费样本”。
数据库包含超过一千个条目,我想找到一种方法每天从数据库中获取新的mysql数据。
假设我的数据库看起来像这样:
id cars
1 honda
2 volvo
3 ford
4 audi
我希望“当天的车”能够24小时成为'本田',然后'福特'24小时,然后'奥迪'24小时等等......
这是我到目前为止所做的:
<?php
//Create mysql connect variable
$conn = mysql_connect('server', 'username', 'password');
//kill connection if error occurs
if(!$conn){
die('Error: Unable to connect. <br/>' . mysql_error());
}
//connect to mysql database
mysql_select_db("masdswe9", $conn);
$results = mysql_query("SELECT * FROM cars");
$name_array = Array();
while($row = mysql_fetch_array($results)){
$name_array[] = $row['name'];
}
shuffle($name_array);
/* I would like for this to fetch NEW SQL data every 24 hours,
since I am shuffling names above, slot 0 will be different once I
come up with a way to fetch new mysql data every 24 hours */
echo $name_array[0];
?>
答案 0 :(得分:2)
我会创建一个名为CarOfTheDay
的数据库表,您可以从中选择(它只有Cars
表中的汽车ID。或者你可以有一个列carOfTheDay
,或者改变汽车的顺序,但我认为那些更具侵入性。
创建一个每天运行一次的cron并将随机车写入CarOfTheDay
。然后,你可以做你上面做的事情,但你不必担心时间安排,你只会选择一辆车:
SELECT
cars
FROM
CarOfTheDay
JOIN Cars USING (id)
LIMIT 1
如果您坚持使用LIMIT
,则不需要CarOfTheDay
。
顺便说一下,使用PDO
或mysqli
而不是mysql_*
。只选择您需要的列(不要在生产代码中使用SELECT *
)..并且只选择您需要的行(您可以在查询中随机化)。
答案 1 :(得分:2)
@Explosion Pills为您的未来提供了一个很好的解决方案。在您的未来,一些汽车公司将花大价钱让他们的产品成为当天的汽车。
现在,让我们假设您只想浏览一下您的汽车清单,并将每一辆汽车轮流当作汽车。假设您的ID值全部存在,没有间隙,从1开始。
然后:
SELECT id, car
FROM cars
WHERE id >= 1+MOD(TO_DAYS(CURDATE()),(SELECT MAX(ID) FROM cars)+1)
ORDER BY ID
LIMIT 1
每天都会按照你桌上所有汽车的id序列给你一辆新车。
这里的诀窍是这个表达式:1+MOD(TO_DAYS(CURDATE()),(SELECT MAX(ID) FROM cars)+1)
它基本上是这样做的:
1+
和-1
有一些猴子业务,因为模数运算工作0 - n-1而不是1 - n。
请注意,我使用的是>=
和LIMIT 1
而不是简单的=
,因此如果您最终遇到差距,您的查询将不会在随机的一天中崩溃你的id序列。
修改 这假设您的表名为“cars”,它包含id
列和car
列。如果不是这样,则需要相应地更改查询。在编程之前,最好尝试在像phpmyadmin这样的SQL客户端中调试这些东西。我对自己的一些虚拟数据进行了测试。