使用mySQL每天获取新的表数据

时间:2012-08-01 14:26:38

标签: php mysql

我正在处理的网站提供了一项服务,只有会员才能获得对内容的完全访问权限。我试图在主页上创建一个“样本”,每天获取新的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];
?>

2 个答案:

答案 0 :(得分:2)

我会创建一个名为CarOfTheDay的数据库表,您可以从中选择(它只有Cars表中的汽车ID。或者你可以有一个列carOfTheDay,或者改变汽车的顺序,但我认为那些更具侵入性。

创建一个每天运行一次的cron并将随机车写入CarOfTheDay。然后,你可以做你上面做的事情,但你不必担心时间安排,你只会选择一辆车:

SELECT
   cars
FROM
   CarOfTheDay
   JOIN Cars USING (id)
LIMIT 1

如果您坚持使用LIMIT,则不需要CarOfTheDay

顺便说一下,使用PDOmysqli而不是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. 将今天的日期变为数字
  2. 计算表格中的最大ID号
  3. 以今天的日期为模数
  4. 使用该ID查找行。
  5. 1+-1有一些猴子业务,因为模数运算工作0 - n-1而不是1 - n。

    请注意,我使用的是>=LIMIT 1而不是简单的=,因此如果您最终遇到差距,您的查询将不会在随机的一天中崩溃你的id序列。

    修改 这假设您的表名为“cars”,它包含id列和car列。如果不是这样,则需要相应地更改查询。在编程之前,最好尝试在像phpmyadmin这样的SQL客户端中调试这些东西。我对自己的一些虚拟数据进行了测试。

    http://sqlfiddle.com/#!2/eb1bb/1/0