【问题标题】:PHP / MySQL Displaying List of ResultsPHP / MySQL 显示结果列表
【发布时间】:2023-04-10 07:01:01
【问题描述】:

我需要一些帮助来用 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

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

<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 格式。

如果有人可以帮助我,我将不胜感激。

谢谢!

【问题讨论】:

    标签: php mysql database foreach while-loop


    【解决方案1】:

    我个人会以不同的方式设计数据库并将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】:

      这会有所帮助。

      您只需要存储旧类别即可与新类别进行比较。 (这里假设您已经根据类别对记录进行了排序,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"];
          }
      }
      

      【讨论】:

      • 没有添加div标签,但是很容易添加。
      【解决方案3】:

      我认为这样的事情应该可以解决问题,您可以为每个“标题”创建一个数组,其中包含该标题下的所有“服务”元素......然后您只需遍历每个“标题”数组生成子弹:

      $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;
      

      这是结构化的,因此它适用于尽可能多的“标题”类型。 (显然你需要在顶部的 mysql_query() 中放入 sql 和连接。

      【讨论】:

      • 嗨,Ben,很抱歉回到这个问题,但只是一个简单的问题。如何修改它以包含 $service_id。
      • 中的每个服务都有一个与之关联的 ID,我使用的是 jQuery 内联编辑脚本,因此我需要每个服务都有一个唯一的 ID。所以我有 3 个变量 $stmt->bind_result($service_id, $service_name, $service_title);只需要弄清楚在哪里插入 service_id
    • 需要在数组的某个地方,如果我只是把它放在 $html .= "
    • $service
    • " ;然后它会为所有这些显示“12”,这是列表的最后一个 ID。
    • service_title_id 相同,所以我可以在

      $key

      附近有一个删除按钮
    • 唯一 ID 是否必须与您的 jquery 函数的 mysql id 相同?我建议只在最外面的 foreach 循环的顶部设置一个迭代器 ($i=0),然后在生成每个列表项之后设置一个 $i++。但是,html 元素 ID 不能以数字开头,因此您需要将其修改为:
    • $service
    • 。如果您绝对需要 id 来匹配 mysql id,您需要修改创建初始数组的行: $result_array[$r['title']][] = array('title'=>$r[ '服务'],'id'=>$r['id']);然后使用 $service['id'] 和 $service['title']
    • 感谢您的回复。但是是的,它需要 id 来匹配 mysql id。
    • 猜你喜欢
      相关资源
      最近更新 更多
      热门标签