2017-03-09 114 views
0

我有3个表:PHP MySQL的嵌套结果

轮廓

ID | fname |政策

用户

ID |全名| claimnum

returnprod

claim_id | prodname |说明

我的SQL是这样的:

("SELECT * 
,CONCAT(fname, ' ' ,lname) AS fullName 
,CONCAT(firstname, ' ' ,lastname) AS InsName 
,a.address AS ADDRESS 
,a.city AS CITY 
    ,a.state AS STATE 
    ,a.zip AS ZIP 
    ,a.phone AS PHONE 
    ,a.fax AS FAX 
    ,a.email AS EMAIL 
FROM profile a 
INNER JOIN returnprod b ON a.policy = b.claim_id 
INNER JOIN users c ON a.adjuster_id = c.id 
WHERE date >= '$Start' AND date <= '$End' 

跳跃前进一点点地循环

`$products[]= $row;` 
`foreach ($products as $product) 
{ 
    if ($row['policy'] === $product['claim_id']) { 
    $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowcount,$product['product']);  
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowcount, $product['comment']);  
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowcount, $product['anotes']); 
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowcount, $product['price']); 
}` 

这是工作的罚款,如果只有一个产品。结果会看起来像这样...

row 1:claim_id |名字|调节器名称
第2行:产品名称|描述|等

如果我有一个以上的产品出现这种情况...

第1行:claim_id |名字|调节器名称
第2行:产品名称|描述|等
第3行:claim_id |名字|调节器名称
第4行:产品名称|描述|等
第5行:产品名称|描述|等

而是所有的产品组合在一起,并显示他们都低于它给我的第一个结果的轮廓下,然后再次给我的个人资料,与第一个产品,然后第二个产品档案信息的。

我该如何对第一次将配置文件下的所有产品进行分组?

实施例:

行1:claim_id |名字|调节器名称
第2行:产品名称|描述|等
第3行:产品名称|描述| etc

谢谢您花时间阅读本文。

+0

您的查询不应该'claim_id迭代|名字|调整器名称“在foreach中,你需要保持它在foreach之外。 – Pawan

+0

我没有在每个循环中。回答上面更新以反映每个内部。 – Billy

回答

0

$products[] = $row似乎表明这不是唯一的循环;更多的上下文可能有帮至少,您会希望按照您打算分组的(ORDER BY a.id, a.policy)来对数据库结果进行排序。然后,您可以保留对上次看到的策略的引用,并在匹配时跳过标题。

$last_id = ''; 
foreach ($rows as $row) { 
    if (! $row['policy'] === $last_id) { 
     // Write claim_id | firstname | adjuster name 
    } 
    // Write productname | description | etc 
    $last_id = $row['policy']; 
} 

假设是你所追求的......

-1

我去这个以不同的方式。

而不是使用FOREACH我结束了使用WHILE。

while($row = mysql_fetch_array($result)){ 
// CODE TO QUERY PROFILE INFORMATION 

$productquery=("SELECT * FROM returnprod WHERE claim_id = '$POLICY'"); 
while($product = mysql_fetch_array($prods)){ 

//CODE TO QUERY THE PRODUCTS ASSOCIATED WITH THE PROFILE 
} 
} 

然后我在$结果添加GROUP BY a.policy

+0

没有问题,这可能是一个令人满意的解决方案 – Strawberry