【问题标题】:MySQL PHP nested resultsMySQL PHP 嵌套结果
【发布时间】:2017-03-09 22:26:23
【问题描述】:

我有 3 张桌子:

个人资料

标识 |名称 |政策

用户

标识 |全名 |索赔号码

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 行:产品名称 |描述 |等等

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

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

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

第一次如何将所有产品分组到配置文件下?

示例:

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

感谢您抽出宝贵时间阅读本文。

【问题讨论】:

  • 您的查询不应在 foreach 中迭代 claim_id | firstname | adjuster name,您需要将其保留在 foreach 之外。
  • 我在 for each 循环中没有它。上面更新的答案反映在每个人的内部。

标签: php mysql nested-loops


【解决方案1】:

$products[] = $row 似乎表明这不是唯一的循环;更多上下文可能会有所帮助。至少,您将希望按您打算按(ORDER BY a.id, a.policy) 分组的任何内容对数据库结果进行排序。然后,您可以保留对 last-seen 策略的引用,如果匹配,则跳过标头。

$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'];
}

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

【讨论】:

    【解决方案2】:

    我以不同的方式解决了这个问题。

    我最终没有使用 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

    【讨论】:

    • 没有问题,这可能是一个令人满意的解决方案
    猜你喜欢
    • 2014-12-28
    • 2015-06-23
    • 2016-04-30
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2014-10-20
    相关资源
    最近更新 更多