我猜你們肯定都碰到過以下的情況
我有兩個表,magazine(雜志信息)和subscibe(訂閱信息),在subscibe表內我有一個magazine_id來和magazine表內的編號關聯
現在我要做一個浏覽訂閱信息的列表,這個列表內有一列是顯示雜志名稱的(magazine表的name字段),有一種辦法是使用join在這兩個表之間做一個關聯,把magazine_id都替換成為name,但是這個列表是一個搜索結果,sql查詢語句是拼接而成的,假如再加上join,拼接sql的邏輯會變得有點復雜,所以還是簡單的弄一個select * from subscibe where ....,然後把結果集內的magazine_id拿來查詢會比較簡單一點,這又出現另外的問題就是我不想在我的程序裡出現過多的重復查詢,比如結果集內有10條數據都是關於同一個magazine_id,我就會多出9條重復的查詢,於是我決定這樣干
function MagazineInfoById($magazine_id){
global $db;
static $magazine_info;
if (!isset($magazine_info[$magazine_id])){
$magazine_info[$magazine_id] = $db->getRow('select * from magazine where id = '. $magazine_id);
}
return $magazine_info[$magazine_id];
}
while (....){
$magazine_info = MagazineInfoById($magazine_id);
.....
}
MagazineInfoById()內的靜態變量$magazine_info就成為了一個緩存形式的東西,在某些情況下,可以大大的降低查詢的次數,避免重復的查詢