PHP / MySQL显示结果列表

时间:2011-12-19 20:49:26

标签: php mysql database foreach while-loop

我需要一些帮助在PHP中显示我的结果。以下是我查询的显示内容:

SELECT service_names.id, service_names.name as service, service_titles.name 
as title,  user_id  FROM `service_names` INNER JOIN service_titles ON title_id 
= service_titles.id

enter image description here

设计的方式,我需要像这样显示结果:

<div class="list">
    <h3 class="secondary">Maintenance</h3>
        <ul>
            <li>Wiper Blades</li>
            <li>Air Filter</li>
            <li>Cabin Filter</li>
            <li>Fuel Filter</li>
            <li>Cooling System</li>
            <li>Brake System</li>
            <li>Fuel System</li>
            <li>Trans Fluid Exchange</li>
        </ul>
</div>
<div class="list">
    <h3 class="secondary">Tire Services</h3>
       <ul>
            <li>Tire Rotation</li>
            <li>Flat Repair</li>
            <li>Wheel Balance</li>
            <li>Wheel Alignment</li>
        </ul>
</div>

这是我之前发布的thread,它解释了我的数据库设计并显示了它需要的样子。所以基本上我已经有了数据库设计,但现在我不太清楚如何创建查询以循环遍历所有结果并将其保存在上面发布的HTML格式中。

如果有人能帮助我,我会非常感激。

谢谢!

3 个答案:

答案 0 :(得分:4)

我觉得这样的事情应该是诀窍,你可以为每个标题创建一个数组&#39;其中包含所有&#39;服务&#39;那个标题下的元素......然后你就可以遍历每个标题&#39;用于生成项目符号的数组:

$query=mysql_query('',[DB_CONNECTION]);
if (!$query){
    //do something  
}
if (!mysql_num_rows($query)){
    //do something for no results   
}

$result_array = array();

while($r=mysql_fetch_array($query)){
    if (!isset($result_array[$r['title']])){
        $result_array[$r['title']] = array();
    }
    $result_array[$r['title']][] = $r['service'];
}

$html = "";
foreach($result_array as $key => $value){
    $html .= "
    <div class=\"list\">
        <h3 class=\"secondary\">$key</h3>
            <ul>";
        foreach($result_array[$key] as $service){
            $html .= "<li>$service</li>\n"; 
        }
    $html .= "</ul></div>";
}

echo $html;

这是结构化的,因此它适用于尽可能多的&#34;标题&#34;你有类型。 (显然你需要在顶部的mysql_query()中输入sql和connection。

答案 1 :(得分:2)

就我个人而言,我会以不同的方式设计数据库,并将title放在一个单独的表中,但是根据您现在拥有的内容,您可以轻松地按title排序并跟踪当前的数据。在更改标题时,您需要开始一个新列表。

像(伪代码):

SQL:

SELECT service_names.id, service_names.name as service, service_titles.name as title,  user_id  FROM `service_names` INNER JOIN service_titles ON title_id = service_titles.id ORDER BY `service_names`.`name`

PHP

$old_title = '';
$title = '';
// start list
foreach ($row = mysql....)
{
  $title = $row['title'];
  if ($title != $old_title)
  {
    // end list
    // start list
    $old_title = $title;
  }
  // add list item
}
// end list

答案 2 :(得分:1)

这可以提供帮助。

您只需要存储旧类别以与新类别进行比较。 (这是假设您根据类别订购了记录,可以通过ORDER BY轻松完成)

$oldCat ="";
while($newRow = mysql_fetch_row()){
    if($oldCat!=$newRow["title"]) {
        echo '<h3 class="secondary">'. $newRow["title"] . '</h3>';
        echo "<ul>";
    }
    echo '<li>'.$newRow["service"].'</li>';

    if($oldCat!=$newRow["title"]) {
        echo "</ul>";
        $oldCat= $newRow["title"];
    }
}