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