好久沒有這種感動,又學會了一種技術,組合來自不同資料庫 & 二維陣列排序方式。
因為要做一個計劃的入口網站,每個計劃都有專屬的最新消息資料庫,他們可能來自不同的伺服器資料庫甚至是伺服器,於是我開始研究該如何將這些資料擷取出來,然後進行重新排序,最後顯示呈現出來。
首先會有來自不同資料庫的連線
<?php require_once('Connections/LinkA.php'); ?> <?php require_once('Connections/LinkB.php'); ?> |
接下來從不同的資料庫中擷取出資料表
ABC為連線的資料庫名稱
member_sys為連線的資料表名稱
藍色的字為欄位名稱
$maxRows_newsA = 5; $pageNum_newsA = 0; if (isset($_GET['pageNum_newsA'])) { $pageNum_newsA = $_GET['pageNum_newsA']; } $startRow_newsA = $pageNum_newsA * $maxRows_newsA; mysql_select_db($database_AData, $LinkA); $query_newsA = "SELECT NewsTitle, NewsLink, NewsDate FROM `news` ORDER BY NewsDate DESC"; $query_limit_newsA = sprintf("%s LIMIT %d, %d", $query_newsA, $startRow_newsA, $maxRows_newsA); $newsA = mysql_query($query_limit_newsA, $LinkA) or die(mysql_error()); $row_newsA = mysql_fetch_assoc($newsA); $maxRows_newsB = 5; $pageNum_newsB = 0; if (isset($_GET['pageNum_newsB'])) { $pageNum_newsB = $_GET['pageNum_newsB']; } $startRow_newsB = $pageNum_newsB * $maxRows_newsB; mysql_select_db($database_BData, $LinkB); $query_newsB = "SELECT NewsTitle, NewsLink, NewsDate FROM `news` ORDER BY NewsDate DESC"; $query_limit_newsB = sprintf("%s LIMIT %d, %d", $query_newsB, $startRow_newsB, $maxRows_newsB); $newsB = mysql_query($query_limit_newsB, $LinkB) or die(mysql_error()); $row_newsB = mysql_fetch_assoc($newsB); |
然後把newsA跟newsB結合在一起成為the_news
$i=0; do { $the_news[$i]=array('theDate'=>$row_news_tea['NewsDate'],'theTitle'=>$row_news_tea['NewsTitle'],'theLink'=>$row_news_tea['NewsLink']); $i=$i+1; } while ($row_news_tea = mysql_fetch_assoc($news_tea)); do { $the_news[$i]=array('theDate'=>$row_news_twt['an_date'],'theTitle'=>$row_news_twt['an_text'],'theLink'=>NULL); $i=$i+1; } while ($row_news_twt = mysql_fetch_assoc($news_twt)); |
寫一個function,用theData來作為排序的關鍵,
return ($a['theDate'] < $b['theDate']) ? 1 : -1; //由大到小排序
return ($a['theDate'] > $b['theDate']) ? 1 : -1; //由小到大排序
function sort_by_Date($a, $b) { if($a['theDate'] == $b['theDate']) return 0; return ($a['theDate'] < $b['theDate']) ? 1 : -1; } |
排序後的the_news並沒有馬上更新排序,必須再利用 array_values 函式僅取回第一維陣列的 value 部分
$the_news = array_values($the_news); |
最後下排序的指令
usort($the_news, 'sort_by_Date'); |
顯示
<table> <?php for($j = 0; $j < $i; $j++) { echo "<tr><td>".$the_news[$j]['theDate']."</td><td><a href="/.$the_news[$j]['theLink'].">".$the_news[$j]['theTitle']."</a></td></tr>"; } ?> </table> |