PHP 組合來自不同資料庫 & 二維陣列排序

好久沒有這種感動,又學會了一種技術,組合來自不同資料庫 & 二維陣列排序方式

 

因為要做一個計劃的入口網站,每個計劃都有專屬的最新消息資料庫,他們可能來自不同的伺服器資料庫甚至是伺服器,於是我開始研究該如何將這些資料擷取出來,然後進行重新排序,最後顯示呈現出來。

首先會有來自不同資料庫的連線

<?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>