我有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 |描述|等等
感谢您抽出宝贵时间阅读此内容。
答案 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