php - 从mysql列表创建列

时间:2011-01-16 07:48:52

标签: php mysql

我有一个从简单的mysql选择查询生成的长列表 目前(如下面的代码所示)我只是创建每个记录的表行列表。所以,没什么复杂的。

但是,我想将其分成多个列,具体取决于返回的结果数。我一直在围绕如何在php中计算这个数据,我没有得到我需要的结果。

<table>    
    <? 
         $query = mysql_query("SELECT * FROM `sometable`");
         while($rows = mysql_fetch_array($query)){    
    ?>
            <tr>
              <td><?php echo $rows['someRecord']; ?></td>
            </tr>    
   <? } ?>          
</table>

显然,生成了一列。因此,如果返回的记录达到10,那么我想创建一个新列。换句话说,如果返回的结果是12,我有2列。如果我有22个结果,我将有3列,依此类推。

4 个答案:

答案 0 :(得分:1)

简单地做

<?php

while($row = mysql_fetch_row($query)) {
    print "<tr>\n";
    print "\t<td>";
    foreach($row as $i => $value) {
        if ($i >= 10 && $i % 10 === 0) {
            print "</td>\n\t<td>";
        }
        print $value;
    }
    print "</td>\n";
    print "</tr>\n";
}

答案 1 :(得分:0)

有趣的问题;我对此的前两次尝试是错误的(如下面的评论所示)。我假设你不想将元素连在一起,而是想要创建一个合适的表。如果concat适合你,请务必使用其他解决方案,因为它更加简单和优雅。

<?php
$totalCount = mysql_num_rows($query);
$colMax     = 10;
$colcount   = ceil($totalCount / $colMax);

$counter = 0;
while($row = mysql_fetch_assoc($query)) {
   echo "<tr>";
   for($i = 0; $i < $colCount; $i++) {
      echo "<td>".$row['someRecord']."</td>";
   }
   echo "</tr>";   
}
?>

答案 2 :(得分:0)

这可能是一种更简单的方法,但我试了一下:

<table>    
    <? 
         $result = mysql_query("SELECT * FROM `sometable`");
         $maxRows = 10;
         $requiredColumns = ceil($numRows/$maxRows);
         $rowArray = array();
         while($row = mysql_fetch_assoc($result)){  
            $rowArray[] = $row;
         }
         $tableArray = array();
         $rowCounter = 0;
         $columnCounter = 1;
         foreach($rowArray as $row){
            if($rowCounter % $maxRows == 0)
               $columnCounter++;
            $tableArray[$columnCounter][] = $row['someRecord'];

         }

         for($i = 0; $i < $maxRows; $i++){
            echo "<tr>"
            for($k = 1; $k <= $requiredColumns; $k++){
                $cellContent = isset($tableArray[$k][$i])? $tableArray[$k][$i] : "&nbsp;";
                echo "<td>$cellContent</td>";
                $k++;
            }
            $i++;
            echo "</tr>"
         }

    ?>       
</table>

答案 3 :(得分:0)

我略微缩短了詹姆斯威廉的版本:

    $maxRows = 10;

    $tableArray = array();
    $rownum = 0;

    $result = mysql_query("SELECT * FROM `sometable`");


    while($row = mysql_fetch_assoc($result))
    {
        $rownum = $rownum % $maxRows; 
        $tableArray[$rownum][] = $row['record'];        
        $rownum++;  
    }

    // If you want empty table cells, just finish the cycle, else skip it:
    for( ; $rownum < $maxRows; $rownum++)
    {   
        $tableArray[$rownum][] = "";        
    }

    foreach( $tableArray as $rowArray )
    {
        echo "<tr><td>";
        echo implode( "</td><td>", $rowArray);
        echo "</td></tr>\n";
    }