CSS / PHP / MySQL - 将结果显示为3列

时间:2012-05-09 03:51:32

标签: php mysql css

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

设置是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 div {/ 1}}。

left中的

Columns B through Y

middle div div中的

Column Z

这是我的疑问:

right

我真的不确定从哪里开始。

4 个答案:

答案 0 :(得分:2)

始终尝试从实际代码中分离视图(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>

干杯!

答案 1 :(得分:1)

这里你有很多选择。但正如我要做的那样是制作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>

类似的东西,你可以在那里添加空的支票等。

答案 2 :(得分:1)

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

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

答案 3 :(得分:-2)

我做了这件事,但我把结果放到了一张桌子里。我使用了模数函数和辅助计数器变量。

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++;
}
?>