多表查詢並將查詢結果合並為一個多維數組
阿新 • • 發佈:2018-07-01
同時 2018年 epo 連接 reporting db_name 畫面 AS 陳奕迅
表cms_top:
id name
1 國際新聞
2 國內新聞
表cms_category:
id name tid(連接上級)
1 國際娛樂新聞 1
2 國際體育新聞 1
3 國際時政新聞 1
4 國內娛樂新聞 2
5 國內體育新聞 2
表cms_article:
id title ptime source click content uid(連接cms_user中的ID) cid(連接上級) tuijian
要將查詢內容合並為如下形式的多維數組,之後直接從該多維數組中遍歷取得數據:
方法:
/*文件 sql_config.inc.php*/ <?php //數據庫地址 define(‘DB_HOST‘, ‘‘); //數據庫的用戶名 define(‘DB_USER‘, ‘‘); //數據庫密碼 define(‘DB_PASS‘, ‘‘); //數據庫的字符集 define(‘DB_CHARSET‘, ‘utf8‘); //數據庫的名稱 define(‘DB_NAME‘, ‘‘); //數據表的前綴 define(‘DB_PREFIX‘, ‘cms_‘);?> /*文件 connect_sql.func.php*/ <?php error_reporting(0); function connect_sql($sql){ //1、連接數據庫服務器 //mysql_pconnect持久連接,不推薦使用 @$link=mysql_connect(DB_HOST,DB_USER,DB_PASS); //2、判斷是否連接成功 if (!$link){ echo "數據庫服務器連接失敗,錯誤信息為:".mysql_error().",錯誤號為:".mysql_errno();return false; } //3、設置客戶端字符集 //mysql_query("set names utf8"); mysql_set_charset(DB_CHARSET); //4、選擇數據庫 mysql_select_db(DB_NAME,$link); //5、準備sql語句 //6、發送sql語句 $res=mysql_query($sql); //7、處理結果 if (is_resource($res)){ //若$sql為查詢語句則$res應當返回為結果集資源,需要解析 while ($row=mysql_fetch_assoc($res)){ $data[]=$row; } mysql_free_result($res); mysql_close(); return $data;//註意:這裏返回的$data為二維數組 }else{ //若$sql為增、刪、改則判斷其受影響行數 if ($res){ $rows=mysql_affected_rows(); mysql_close(); return $rows; }else{ echo mysql_error(); mysql_close(); return false; } } } ?> <?php include ‘../config/sql_config.inc.php‘; include ‘../common/connect_sql.func.php‘; //將頂級分類、二級分類和文章表關聯組成多維數組 $sql01="select id,name from ".DB_PREFIX."top"; $tops=connect_sql($sql01); foreach ($tops as &$val01){ //加&,遍歷數組鍵值的同時添加‘cates‘=>array()元素 $sql02="select id,name from ".DB_PREFIX."category where tid=".$val01[‘id‘]; $cates=connect_sql($sql02); $val01[‘cates‘]=$cates; foreach ($val01[‘cates‘] as &$val02){ $sql03="select id,title,ptime from ".DB_PREFIX."article where cid=".$val02[‘id‘]; $arts=connect_sql($sql03); $val02[‘arts‘]=$arts; } } var_dump($tops); ?>
結果為:
array(2) { [0]=> array(3) { ["id"]=> string(1) "1" ["name"]=> string(12) "國際新聞" ["cates"]=> array(3) { [0]=> array(3) { ["id"]=> string(1) "1" ["name"]=> string(18) "國際娛樂新聞" ["arts"]=> array(1) { [0]=> array(3) { ["id"]=> string(1) "1" ["title"]=> string(54) "超甜!英國小哥黴黴演唱會上向女友求婚" ["ptime"]=> string(10) "1530235016" } } } [1]=> array(3) { ["id"]=> string(1) "2" ["name"]=> string(18) "國際體育新聞" ["arts"]=> array(2) { [0]=> array(3) { ["id"]=> string(1) "2" ["title"]=> string(53) "英格蘭丟單刀獲第2 比利時全勝將戰日本" ["ptime"]=> string(10) "1530235177" } [1]=> array(3) { ["id"]=> string(1) "6" ["title"]=> string(51) "2018年世界杯,荷蘭、意大利未進入32強" ["ptime"]=> string(10) "1530261159" } } } [2]=> array(3) { ["id"]=> string(1) "3" ["name"]=> string(18) "國際時政新聞" ["arts"]=> array(1) { [0]=> array(3) { ["id"]=> string(1) "3" ["title"]=> string(65) "環球時報社評:美要世界不買伊朗石油 中國怎麽辦" ["ptime"]=> string(10) "1530235270" } } } } } [1]=> &array(3) { ["id"]=> string(1) "2" ["name"]=> string(12) "國內新聞" ["cates"]=> array(2) { [0]=> array(3) { ["id"]=> string(1) "4" ["name"]=> string(18) "國內娛樂新聞" ["arts"]=> array(2) { [0]=> array(3) { ["id"]=> string(1) "4" ["title"]=> string(36) "陳奕迅赴俄羅斯觀看世界杯" ["ptime"]=> string(10) "1530235474" } [1]=> array(3) { ["id"]=> string(1) "7" ["title"]=> string(77) "倪妮baby牽手蕩秋千畫面文藝唯美 兩人燦笑開心的像個孩子" ["ptime"]=> string(10) "1530414358" } } } [1]=> &array(3) { ["id"]=> string(1) "5" ["name"]=> string(18) "國內體育新聞" ["arts"]=> array(1) { [0]=> array(3) { ["id"]=> string(1) "5" ["title"]=> string(63) "姚明在場下目睹這一幕:中國內線竟被韓國打爆" ["ptime"]=> string(10) "1530235548" } } } } } }
多表查詢並將查詢結果合並為一個多維數組