多表查询并将查询结果合并为一个多维数组

表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"
          }
        }
      }
    }
  }
}

原文地址:https://www.cnblogs.com/zhouwanqiu/p/9250746.html

时间: 2024-10-14 12:05:48

多表查询并将查询结果合并为一个多维数组的相关文章

数组合并函数,二维数组相同字段合并到一起。

一般从数据库中提取数据时,会遇到各种各样类型的数据,要求也不尽相同.自己这两天开发的时候遇到一个很纠结的问题,如下: 比如一个二维数组是这样的: Array ( [0] => Array ( [uid] => 231 [username] => 123456 [active] =>aaaa [transfer] =>1111 ) [1] => Array ( [uid] => 231 [username] =>123456 [active] => bb

对N个数组进行操作。先把这N个一维数组合并成一个2为数组;然后进行操作

using System;using System.Collections.Generic;using System.Linq;using System.Collections;using System.Text;using System.Diagnostics; namespace Hecha.Test{ class Program { static void Main(string[] args) { List<string>[] aa = new List<string>[5

PHP 合并两个二维数组 array_map 和 array_walk 的区别

  array_map array_walk 函数介绍 为数组的每个元素应用回调函数 使用用户自定义函数对数组中的每个元素做回调处理 版本限制 (PHP 4 >= 4.0.6, PHP 5, PHP 7) (PHP 4, PHP 5, PHP 7) 使用说明 array_map ( callable callback,arrayarr1 [, array $- ] ) array_walk ( array &array,callablefuncname [, mixed $userdata

办公自动化18-将多个excel表中的多个sheet合并到一个excel中的一个sheet

合并前excel中的数据情况: 合并后的excel中数据情况: 附上代码如下: import pandas as pd year = ['2017','2018']#文件夹的命名 sheet_concat = pd.DataFrame() for i in range(len(year)): sheet = pd.read_excel('C:/Users/17360/Desktop/test/'+year[i]+'.xlsx',sheet_name = None,header= 0) #shee

合并一个多维数组中键的值相同的数组

<?php header("Content-type:text/html;charset=utf-8"); $arr = array( '0'=>array( 'name'=>'热菜', 'in'=>'in1', 'on'=>'on2' ), '1'=>array( 'name'=>'热菜', 'in'=>'in2', 'on'=>'on2' ), '2'=>array( 'name'=>'热菜', 'in'=>'

PHP合并 两个二维数组

$a = array( array('id'=>'113','email'=>'[email protected]'), array('id'=>'111','email'=>'[email protected]'), array('id'=>'109','email'=>'[email protected]') ); $b = array( array('user_id'=>'113','count'=>'1'), array('user_id'=>

in查询和两个二维数组的拼接

1.当某个教练查看自己学员的时候,可以通过获取学员身份证号,然后在怎么通过不同的身份证号获取学员的登录名(可用视图实现,userinfo表和studentinfo表进行拼接) 解决: functionarrTostr ($arr)//把二维数组转化为字符串 { foreach ($arr as $v) { $v = join(",",$v); //可以用implode将一维数组转换为用逗号连接的字符串 $temp[] = $v; } $t=""; foreach($

将一个二维数组合并成一个一维数组

大家都知道php有内置的数组合并函数array_merage($arr,$arr1,$arr2,$arr3);那如何把一个二维数组如array(array('a'=>1,'b'=>2),array('c'=>3,'d'=>4)) 合并成如下的数组 array('a'=>1,'b'=>2,'c'=>3,'d'=>4);似乎,php目前还没有这样的内置函数吧,于是自己动手写了两种方法,仅供大家参考 第一种.方法当然是递归法呢,代码如下 <?php $new

合并二维数组,并计算重复字段的平均值

1 <?php 2 $arrs = Array ( 3 Array ( 'rname' => '小麦', 'm1'=> 12.00 ,'m2'=> 33,'qq'=> 33 ) , 4 Array ( 'rname' => '小麦', 'm1' => 23.00,'m2'=> 44,'qq'=> 11 ) , 5 Array ( 'rname' => 'ccc', 'm1' => 11,'m2'=> 22,'qq'=> 12 )