3

私が取り組んでいるウェブサイトは、会員だけがコンテンツにフルアクセスできるサービスを提供しています。ホームページに「サンプル」を作成して、新しいmysqlデータ(通常はメンバーのみが利用可能)を毎日取得し、サイトが提供するものの「無料サンプル」をすべてのユーザーに提供しようとしています。

データベースには1,000を超えるエントリが含まれており、毎日データベースから新しい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];
?>
4

2 に答える 2

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で行を検索します。

モジュロ算術が1-nではなく0-n-1で機能するため、いくつかのサルのビジネスがあり1+ます。-1

IDシーケンスにギャップが生じた場合に、クエリがランダムな日にヒープに折りたたまれないようにするために、私が使用>=したLIMIT 1ことに注意してください。=

編集これは、テーブルが「車」と呼ばれ、列idcar。それが当てはまらない場合は、それに応じてクエリを変更する必要があります。プログラミングする前に、phpmyadminなどのSQLクライアントでこれらをデバッグすることをお勧めします。私は自分のダミーデータでこれをテストしました。

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

于 2012-08-01T16:18:49.983 に答える
2

CarOfTheDayから選択できるというDBテーブルを作成します(Carsテーブルには車のIDが含まれます)。それか、コラムを持ったりcarOfTheDay、車の順番を変えたりすることができますが、それらはもう少し邪魔になると思います。

1日に1回実行されるcronを作成し、ランダムな車をに書き込みますCarOfTheDay。次に、上記で行っていることを実行できますが、タイミングを気にする必要はなく、1台の車のみを選択します。

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

あなたLIMITが1つに固執するならば、は必要ではないはずですCarOfTheDay

ちなみに、ではなくPDOまたはを使用してください。必要な列のみを選択し(本番コードでは使用しないでください)、必要な行のみを選択します(クエリでランダム化できます)。mysqlimysql_*SELECT *

于 2012-08-01T14:32:04.057 に答える