這篇文章在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; 這樣的話就能每十年每天播不同的字了~
