MySQL PHP嵌套结果

时间:2017-03-09 22:26:23

标签: php mysql nested-loops

我有3张桌子:

个人资料

  

id | fname |政策

用户

  

id |全名| claimnum

returnprod

  

claim_id |产品名称|说明

我的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']);
}`

如果只有一种产品,这项工作正常。结果看起来像这样......

  

第1行:claim_id |名字|理算员姓名
  第2行:productname |描述|等

如果我有多个产品,就会发生这种情况......

  

第1行:claim_id |名字|理算员姓名
  第2行:productname |描述|等
  第3行:claim_id |名字|理算员姓名
  第4行:productname |描述|等
  第5行:productname |描述|等等

不是将所有产品分组在一起并在配置文件信息下方显示所有产品,而是在配置文件下给我第一个结果,然后再次使用第一个产品和第二个产品向我提供配置文件信息。

如何首次对个人资料下的所有产品进行分组?

实施例:

  

第1行:claim_id |名字|理算员姓名
  第2行:productname |描述|等
  第3行:productname |描述|等等

感谢您抽出宝贵时间阅读此内容。

2 个答案:

答案 0 :(得分: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 :(得分:-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
}
}

然后我在$ result

中添加了GROUP BY a.policy