2012-04-09 56 views
0

我想通过PHP实现一个从MySQL表中的节分隔符排序列表,但我有点麻烦。不要像我想要的那样把汤放在汤头里,我把它放在下面的标题中(就像我不想要的那样)!php分组表1排序1关

这里是视觉输出:

2-Soup 
3-Salad 
    2 Soup  Demo: Tom KaKai 
4-Entree 
    3 Salad Demo: Spinach Salad 
    4 Entree Demo: Pork Chop 
    4 Entree Demo: Spicy Topped Shrimp 

这里是我的代码:

$cat = null; 
while($row = mysql_fetch_array($result)) 
{ 
    if($row['catnum'] != $cat) 
    { 
     echo '<h1>' . $row['catnum'] . '-' . $row['ctgry'] . '</h1>'; 
     $cat = $row['catnum']; 
    } 
    echo "<table><tr><td>" . $row['catnum'] . " </td><td>" . $row['ctgry'] . "</td><td> " . $row['Shrt_Desc'] . "</td></tr>"; 
} 
+0

你看过源代码吗?循环中有一个打开的表格标签,但没有关闭标签。还有什么是你的查询? – liquorvicar 2012-04-09 16:27:20

+0

不知道它是否是你的问题的答案,但是你正在* every *循环迭代中创建一个新表,并且不关闭你的'table'标记,所以每次循环迭代时,你都要在最后一个表内创建另一个表。这可能与它有关。我假设你只想为每个新标题创建一个新表,并为同一类中的每个条目添加行到该表。 – Travesty3 2012-04-09 16:27:45

回答

2

你不关闭你的<table>标签,并开始一个新的表中检索每一个DB行,所以结构上你的HTML页面是一团糟。

你想要的东西是这样的:

$first = true; 
while ($row = mysql_fetch_array($result)) { 
    if ($row['catnum'] != $cat) { 
     if (!$first) { 
      echo '</table>'; // close the table if we're NOT the first row being output. 
     } 

     $first = false; // no longer the first table, so disable this check. 
     echo '<h1> etc...'; 
     echo '<table>'; // start new table 
     $cat = $row['catnum']; 
    } 
    echo '<tr><td>' etc.... // output a table row 
} 

这段代码只会输出,当你改变类别<table><h1>的东西。

+0

谢谢Marc B!快速解决它! – Nat 2012-04-09 16:56:47