【问题标题】:CSS / PHP / MySQL - Display results into 3 columnsCSS / PHP / MySQL - 将结果显示为 3 列
【发布时间】:2012-05-09 03:51:32
【问题描述】:

我正在尝试将我的查询结果显示为每行返回的三列。

设置是 3 个 div 全部漂浮在一个大包装内。够简单吧?

#wrapper {width: 650px;}
#left    {width: 200px; float: left;}
#middle  {width: 200px; float: left;}
#right   {width: 200px; float: left;}

Results displayed like:
LEFT | MIDDLE | RIGHT
LEFT | MIDDLE | RIGHT
LEFT | MIDDLE | RIGHT
LEFT | MIDDLE | RIGHT

只有现在,我有这个 mysql 关联查询,我想在每一列中显示结果。

简单来说,我有 Column A 需要在 left div 中。

Columns B through Ymiddle div

Column Z in right div。

这是我的查询:

while ($row = mysql_fetch_assoc($result)) {
    foreach ($row as $col => $val) {
           if ($col == "Column A") {
              //How to get this in left div?
              }
           if ($col != "Column A" && $col != "Column Z") {
              //How to get this in middle div?
              }
           if ($col == "Column Z") {
              //How to get this in right div?
              }
        }
}

我真的不知道从哪里开始。

【问题讨论】:

    标签: php mysql css


    【解决方案1】:

    始终尝试将视图 (HTML) 与实际代码分开。您可能想阅读一些有关 MVC 架构的信息。一开始可能很难理解,但相信我 - 值得学习如何使用它。

    <?php 
    $column = array(
        'A' => array(), 
        'B' => array(), 
        'Z' => array()
    );
    
    while ($row = mysql_fetch_assoc($result)) {
        foreach ($row as $col => $val) {
               if ($col == "Column A") {
                  $column['A'][] = $row;
                  }
               if ($col != "Column A" && $col != "Column Z") {
                  $column['B'][] = $row;
                  }
               if ($col == "Column Z") {
                  $column['Z'][] = $row;
                  }
            }
    }
    ?>
    
    <style type="text/css">
    div {width:200px;float:left}
    </style>
    
    <!-- 1st column -->
    <div><?php foreach ($column['A'] AS $row) { ?>...<?php } ?></div>
    
    <!-- 2nd column -->
    <div>..</div>
    
    <!-- 3rd column -->
    <div>..</div>
    

    干杯!

    【讨论】:

    • 嗨,伙计。这看起来很棒。你认为做两倍的工作会阻碍性能吗?您提供的示例创建数组然后显示它们。在 while 循环中显示结果与创建数组然后像您在此处一样显示它们(我正在处理数千行数据)中的差异会很明显吗?
    • @Norse 好吧,通过这样做,我试图维护代码以供将来使用。另一种选择是简单地将所需的字符串放在$column['..'] 中,然后对其进行补充。例如。 $column['A'] .= $row['name'] . '&lt;br /&gt;';。这会更快,但同样 - 更难阅读和维护这种代码。
    【解决方案2】:

    这里有很多选择。但正如我要做的那样,制作 3 或 1 个数组,然后在我的模板中用 html 迭代它们。

    类似:

    $col_left  = array();
    $col_mid   = array();
    $col_right = array();
    while ($row = mysql_fetch_assoc($result)) {
        foreach ($row as $col => $val) {
               if ($col == "Column A") {
                      $col_left[] = $val;
                  }
               if ($col != "Column A" && $col != "Column Z") {
                      $col_mid[] = $val;
                  }
               if ($col == "Column Z") {
                      $col_right[] = $val;
                  }
            }
    }
    

    然后只需在 html 中循环这些,您就完成了。还有更多选择,但这是我的想法。

    然后在html中:

    <div id="left">
    <?php 
       foreach($col_left as $result){
          echo $result.'<br/>';
       }
    ?>
    </div>
    

    类似的东西,你可以在那里添加对空等的检查。

    【讨论】:

      【解决方案3】:

      考虑到您当前的标识符,我会稍微自主地执行此操作。我刚刚将所有内容转储到一个数组中,并在底部加入了换行符。我的示例可能有点过于笼统,但它确实可以完成工作,并且完全可以进行调整:)

      <?
      $columns = array(
          'left'      => array(),
          'middle'    => array(),
          'right'     => array()
      );
      
      while ($row = mysql_fetch_assoc($result)) {
          foreach ($row as $col => $val) {
              if ($col == "Column A") {
                  $columns['left'][] = $val;
              } elseif ($col == "Column Z") {
                  $columns['right'][] = $val;
              } else {
                  $columns['middle'][] = $val;
              }
          }
      }
      ?>
      
      <div id="wrapper">
          <? foreach($columns as $column => $value_array) { ?>
          <div id="<?= $column ?>">
              <?= join("<br />", $value_array) ?>
          </div>
          <? } ?>
      </div>
      

      【讨论】:

        【解决方案4】:

        我确实做了这件事,但我把结果放到了一个表格中。我将模函数与辅助计数器变量一起使用。

        if (($artisttablecount % 3) == 0){
                echo "</tr><tr>";
              }
        

        我不确定如何使用 div,但 mod 功能可能会有所帮助。完整代码如下。

          //QUERY
        $artisttable = mysql_query("SELECT DISTINCT * FROM records GROUP BY artist ORDER BY artist ASC");
        
        //HELPER VAR FOR PRINTING IN 3 ROWS
        $artisttablecount=0;
        
        //LOOP THROUGH RESULTS
        while($row = mysql_fetch_array($artisttable)){
        
        //MAKES TABLE 3 COLUMNS
          if (($artisttablecount % 3) == 0){
            echo "</tr><tr>";
          }
          $current=$row['Artist'];      
          $artcount = mysql_num_rows(mysql_query("SELECT * FROM records WHERE artist = '$current'"));
          $spaceless = str_replace(" ", "%20", $row['Artist']); 
          echo "<td><a href=inventory.php?dec=0&format=0&art='" . $spaceless . "'>" .  $row['Artist'] . "</a> ($artcount)</td>";    
          $artisttablecount++;
        }
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-10
          • 1970-01-01
          • 2010-11-14
          • 1970-01-01
          • 2018-05-04
          • 2016-03-02
          • 2012-11-18
          • 2011-02-06
          相关资源
          最近更新 更多