加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

OOP挑战如何在php mysql结果集中使用foreach进行嵌套?

发布时间:2020-12-13 16:54:34 所属栏目:PHP教程 来源:网络整理
导读:我在检索 mysql记录时遇到问题. 我想要实现的是执行一次或最多两次mysql查询,将结果存储在一个数组中,然后使用foreach循环遍历数组以存储结果,如下所述. 我的主数据库表(partner_redirect)有如下数千条记录: id member partnerid Status datePost 1 87887 1
我在检索 mysql记录时遇到问题.
我想要实现的是执行一次或最多两次mysql查询,将结果存储在一个数组中,然后使用foreach循环遍历数组以存储结果,如下所述.

我的主数据库表(partner_redirect)有如下数千条记录:

id     member     partnerid         Status                       datePost
 1       87887       1                 1                         2014-08-09  
 2       988         3                 0                         2014-08-09
 3       4545        1                 1                         2014-08-09  
 4       8892        5                 0                         2014-08-09 
 5       8891        5                 0                         2014-08-09 
 6       8894        5                 0                         2014-08-09 
 7       889         5                 0                         2014-08-02 
 8       2341        3                 1                         2014-08-09    
 9       8893        1                 0                         2014-08-01 
 10      23224       3                 1                         2014-08-01   
 11      88913       5                 0                         2014-08-03 
 12      2324        3                 0                         2014-08-04

………………………………………….. …………………
………………………………………….. …………………

这是我的代码:

db.class.php

class Database {
  ..............................
  ........................
  #-#############################################
  # desc: returns all the results (not one row)
  # param: (MySQL query) the query to run on server
  # returns: assoc array of ALL fetched results
  public function fetch_all_array($sql) {
    $query_id = $this->query($sql);
    $out = array();

    while ($row = $this->fetch_array($query_id)) {
        $out[] = $row;
    }

    $this->free_result($query_id);
    return $out;
  }#-#fetch_all_array()


}

执行:

include_once ('Database.class.php');

  $sql="select id,name from partner ";

$col=$db->fetch_all_array($sql);

 foreach($col as $part)
{
   $id=$part['id'];
   $name=$part['name'];

   $sql ="select partnerid,datePost as date,Status from  partner_redirect_link where partnerID=".$id;

   $partner_redirect=$db->fetch_all_array($sql);

  foreach($partner_redirect as $part_red)
  {

    $data['id']=$part_red['partnerID'];
    $data['date']=$part_red['date'];
    if(isset($previous) &&($previous!=$part_red['date']))
    {
    while($previous==$part_red['date'])
    {
    $redirected=$part_red['redirectedStatus'];


    #if redirected status =0 then
    if ($redirected==0)
    {
        $totalNotredirect=$totalNotredirect+1;
        $data['totalNotredirect']=$totalNotredirect;
        #$data['totalredirect']=0;
    }else{# if 1
        $totalredirected=$totalredirected+1;
        $data['totalredirect']=$totalredirected;
        #$data['totalredirect']=0;
    }

  }

   }else{
       $previous=$data['date'];

        $redirected=$part_red['redirectedStatus'];


        #if redirected status =0 then
        if ($redirected==0)
        {
            $totalNotredirect=$totalNotredirect+1;
            $data['totalNotredirect']=$totalNotredirect;
            #$data['totalredirect']=0;
        }else{# if 1
            $totalredirected=$totalredirected+1;
            $data['totalredirect']=$totalredirected;
            #$data['totalredirect']=0;
        }

     $data['date']=$previous;
      $date[]=$previous;
    }

   }
}

我正在努力存储数据,但我不知道如何对应并计算每个记录保存/比较数组中的每个日期.

所有我想通过使用foreach执行两个查询来显示结果,如下所示:

Date          Partner  TotalRecords(per partner)  count(status=1)  count(status=0)     
 2014-08-09    1         2                              2                  0
 2014-08-09    3         2                              1                  1
 2014-08-09    5         3                              0                  3
 2014-08-04    3         1                              0                  1
 2014-08-03    5         1                              0                  1
 2014-08-01    1         1                              0                  1
 2014-08-01    3         1                              1                  1

更新:

我想通过执行最少次数的查询来从数据库中检索数据
所以它不会减慢我庞大的在线数据库.我的想法是制作一个或两个mysql查询以获得所有结果,然后根据上面提到的所需输出显示记录,但我没有实现这一点!无论如何我无法实现这个????

在这方面,我将非常感谢你的帮助.

解决方法

而不是PHP,我建议使用SQL来完成所有繁重的工作.它只需要一个查询.

SQL

根据您对5列表的所需输出,以下SQL查询可以解决问题.我用我提供的数据在我的本地盒子上测试了它.可以省略日期列,因为您不知道日期实际来自哪一行.

select 
    datePost,partnerid,count(*) as `partner_totalrecords`,sum(case when `status` = 0 then 1 else 0 end) `count_status_0`,sum(case when `status` = 1 then 1 else 0 end) `count_status_1`
from partner_redirect
group by partnerid;

感谢这个SO answer如何获得两个状态计数列.直到现在我才知道该怎么做.干净的把戏.

PHP

从那个查询中,您现在可以输出一个简单的平面表.原谅简洁,但我认为它得到了重点.

$rows=$db->fetch_all_array($sql);

foreach($rows as $row) {
    var_dump($row);
}

结果(来自MySQLWorkbench)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读