6

当社の見積システムを作成していますが、小さな問題が発生しました。概要は次のとおりです。2 つのテーブルがあり、1 つはデータという名前で、もう 1 つは zip という名前です。クライアントは、タバコを使用する場合は性別、年齢、郵便番号、州を入力します。

データテーブルは次のとおりです。

画像

zip テーブルは次のとおりです。

画像

zip ルックアップ コードに基づいて結合する 2 つのテーブルをクエリしました。私が使用しているクエリは次のとおりです。

SELECT data.Monthly_Rate, zips.ZIP_LOOKUP_CODE AS Expr1, zips.State, zips.County, zips.City, zips.Zipcode
FROM data INNER JOIN
zips ON data.ZIP_LOOKUP_CODE = zips.ZIP_LOOKUP_CODE
WHERE (zips.Zipcode = '$zipcode') AND 
(data.Company_Old LIKE '%Blue Cross%') AND
(data.Plan IN ('A','F','F (High)','G','N')) AND 
(data.Gender = '$gender') AND 
(data.Age = '$age') AND 
(data.Tobacco = '$tobacco') AND 
(data.State = '$state');

今私がやりたいのは、これをphpで表に出力することです。私が直面している問題は、「計画」列の下に複数の計画文字があることです。5 つの異なるプランのみを返したいのですが、問題は、これらのプランの 5 つすべてを提供していない会社があるため、この例では、配列を出力しているときに、特定のプランの料金が間違った列に並んでしまうことです。テーブルで。

基本的に、特定の列にデータを正しく配置する方法がわかりません。計画 A、F、および N が会社でのみ使用可能なシナリオでは、最初の 3 つのフィールドに入力され、プラン N のレートは、プラン N の列には表示されません。

与えられたレートをプランレターに関連付ける方法を理解し、それをテーブルに正しく出力する必要があります。以下の例では、プラン A の料金は 111.40 ドル、プラン F は 135.37 ドル、プラン N の料金は 96.52 ドルです。ご覧のとおり、プラン N のレートは正しく調整されていません。これを修正するにはどうすればよいですか?

表出力:

画像

これは、PHP で配列を出力するために使用しているものです。

while($row = mysql_fetch_array($PlanRates))
{   
$Plan = "$" . number_format($row['Monthly_Rate'], 2, '.', '');
echo "<td align='center'>$Plan</td>";           
}
echo "</tr>";
mysql_free_result($PlanRates);
4

1 に答える 1

2

SQLクエリで計画も取得する

SELECT data.Monthly_Rate, data.Plan ...

次に、以下のコードを使用します

while($row = mysql_fetch_array($PlanRates)) {   
  $Plans[$row['Plan']] = "$" . number_format($row['Monthly_Rate'], 2, '.', '');
}
echo "<td align='center'>".(isset($Plans['A']) ? $Plans['A'] : '')."</td>"; 
echo "<td align='center'>".(isset($Plans['F']) ? $Plans['F'] : '')."</td>"; 
echo "<td align='center'>".(isset($Plans['F (High)']) ? $Plans['F (High)'] : '')."</td>"; 
echo "<td align='center'>".(isset($Plans['G']) ? $Plans['G'] : '')."</td>"; 
echo "<td align='center'>".(isset($Plans['N']) ? $Plans['N'] : '')."</td>"; 

ただし、このようにデータ処理ロジックとプレゼンテーションを混在させるべきではありません。クエリを実行し、データを配列として返す関数を使用する必要があります。次に、html マークアップで配列を反復処理します。

于 2012-10-05T14:46:51.547 に答える