OOP挑战如何在php mysql结果集中使用foreach进行嵌套?
我在检索
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 更新: 我想通过执行最少次数的查询来从数据库中检索数据 在这方面,我将非常感谢你的帮助. 解决方法
而不是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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |