這篇文章在KM上已經有三百多篇迴響了、雖然都是外國人、不過都回的很認真、真的很感謝他讓我有繼續寫的動力。果然寫程式是不分國界的

最近Mandarin的Daily Word想學華文網每天輪播一個字 可是...這是我沒遇過的問題~其實華文網首頁的廣告好像有輪播的方法、 但是cache->再用linux的cron我不會、而且好像還是有些小問題 再想了一陣子的結果、首先我認為

<?php

function rand_daily(){

      if(date('H:i:s',time()) == '20:32:00')

      $query = $this->db->query("SELECT * FROM yourtable ORDER BY rand() LIMIT 1");

      else

      $query = $this->db->query("SELECT * FROM yourtable ORDER BY big5_code='A445' LIMIT 1");

      return $query->row();

  }

?>

但這個方法其實只有'20:32:00'那秒執行rand()其它時候就不是了 於是我有開始查PHP有關時間的函數、發現了getdate()這個函數 利用$y = getdate(); $y['yday'] = 來計算每天的日期、總共有 0~365 大家應該會覺得很奇怪0~365是366天而不是365天 因為每當潤年的時候有366天因此要預設給他、不然那天就沒有值可以跑了 於是我想只好再資料庫加個欄位year依順序排0~365而且再加個range不然的話只有365個字會用到 實作的方法如下:

<?php

 function list_array($arr){

 echo '<pre>';

 print_r($arr);

 echo '</pre>';

 }

 $y = getdate();

 //print_r(getdate());

 //echo $y[yday];

 $conn = mysql_connect('localhost','root','lccnet');

 $sql = 'select * from mandarin.main2';

 $result = mysql_query($sql,$conn);    

 echo $row['year'];

 $year = -1;     //初始值設為-1下一次加1才會為0

 $range = 0;

 while($row = mysql_fetch_array($result))

 {            

 $year ++;

 $row['year'] = $year;

 if($year == 365)

 {

 $year = 0;

 $range ++;

 }        

 //$year ++ ;

 //$row['year'] = $year;

 //list_array($row);

 echo 'UPDATE `main2` SET `year` = '.$year .", `range` = ".$range." where `big5_code` = '".$row[1]."';<p>";

 }

?>

這樣的話資料庫的year欄位就會重覆0~365的數字了 接下來在SQL下$sql = select * from yourdb.table where year = '".$y['yday']."' order by rand() limit 0,1(第一次嚐試失敗) 用rand的話,每天會有十幾個字在輪播、因此還要在資料庫欄位多設個range,主要為0~10雖然每日一字的數字共有13年可以輪播 但到時判斷要寫比較細、想一想每十年每天輪播一個字也是夠用了 首先 <?php $year = date('Y',time()); //echo $year; $range = substr(trim($year),-1); echo $range ?> 接下來的$sql = select * from yourdb.table where year = '".$y['yday']."' order by .$range. limit 0,1; 這樣的話就能每十年每天播不同的字了~

arrow
arrow
    全站熱搜

    result945 發表在 痞客邦 留言(0) 人氣()