PHP循环无法正常显示

时间:2014-01-10 15:32:41

标签: php loops

我需要一些循环问题的帮助。对于我下面的示例代码,我有两个Mysql表:

tblDepRatesCats:

ID 
header 
left_text 
center_text 
right_text 
header_order

------

tblRates_balance:

id 
depratecat 
MinBalance 
InterestRate 
APY 
suborder

tblDepRatesCats.ID = tblRatesBalance.depratecat。对于tblDepRatesCats中的每一行,tblRates_balance中可能有0行或1行或更多行。

我正在尝试显示查询这些表的结果,以便它显示每个tblDepRatesCats数据以及相应的tblRates_balance数据,但它显示tblDepRatesCats以便{if} { {1}}行有3 tblDepRatesCats行与之关联,tblDepRatesCats行重复3次,其中一行tblDepRatesCats'

正如您在下面看到的那样,“Super Now Checking Account”会显示3次,但我想要的是它只显示一次3个结果,最小余额和apy列在一个标题下。

  

现在检查帐户每日最低余额以赚取年度APY   百分比收益率$ 1000 10

     

超级现在检查帐户最低每日余额以获得APY年度   产量百分比%$ 2222 2

     

超级现在检查帐户最低每日余额以获得APY年度   产量百分比%$ 2100 25

     

超级现在检查帐户最低每日余额以获得APY年度   百分比收益率%$ 2000 20

     

货币市场账户最低每日平衡以赚取年度APY   产量百分比%$ 3000 30

以下是我的测试代码。任何帮助将不胜感激。

tblDepRatesCats

3 个答案:

答案 0 :(得分:2)

只需将每次不想重复的输出移动到while循环之外...

echo ("<table width=\"98%\" border=\"0\" bgcolor:\"#ffffff\"><tr><td>");
echo ("" . $row["header"] . " <br>");
echo ("" . $row["left_text"] . "&nbsp;&nbsp;");
echo ("" . $row["right_text"] . "");
echo ("</tr></td>");
echo ("<tr><td>");
while ($row = mysql_fetch_assoc($result)) 
{
    //&nbsp temporarily added
    echo ("" . $row["MinBalance"] . "");
    echo ("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
    echo ("" . $row["InterestRate"] . " <br><br>");
}
echo ("</tr></td>");

答案 1 :(得分:0)

如果我理解你的话,那么你需要做的就是改变你的代码:

$result = mysql_query('SELECT tblDepRatesCats.*, tblRates_balance.* FROM tblDepRatesCats JOIN tblRates_balance ON tblDepRatesCats.ID = tblRates_balance.depratecat ORDER BY tblDepRatesCats.header_order, tblRates_balance.suborder;');
$new_result = array();
while ($row = mysql_fetch_assoc($result)) 
{
  $new_result[$row["header"]][] = $row;
}

foreach($new_result as $new_row){
  echo ("<table width=\"98%\" border=\"0\" bgcolor:\"#ffffff\"><tr><td>");
  echo ("" . $new_row[0]["header"] . " <br>");
  echo ("" . $new_row[0]["left_text"] . "&nbsp;&nbsp;");
  echo ("" . $new_row[0]["right_text"] . "");
  echo ("</tr></td>");

  foreach($new_row as $row){
   // &nbsp temporarily added
   echo ("<tr><td>");
   echo ("" . $row["MinBalance"] . "");
   echo("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
   echo ("" . $row["InterestRate"] . " <br><br>");
   echo ("</tr></td>");
  }

  //also, dont forget to close the table:
  echo "</table>";
}

代码的方式是每次进入循环时都开始一个新表

编辑以避免警告。虽然找到一种根本不需要调用$result[0]["xxxxx"]的方法可能更有意义。也许静态变量会更容易,但是获取这些值的第二个查询可能就是您正在寻找的。这取决于

答案 2 :(得分:-1)

如果表之间可以有0个链接,请使用左连接。仅使用连接将导致平衡表中没有数据的行从结果中删除。