1. 程式人生 > >多表查詢並將查詢結果合並為一個多維數組

多表查詢並將查詢結果合並為一個多維數組

同時 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"
          }
        }
      }
    }
  }
}

多表查詢並將查詢結果合並為一個多維數組