2011-01-16 5 views
1

私は、単純なmysql選択クエリから長いリストを生成しました。
現在(下のコードに示されています)私は単純に各レコードでテーブル行のリストを作成しています。だから、何も複雑ではない。php - mysqlリストからカラムを作成する

ただし、返される結果の数に応じて、複数の列に分割したいと考えています。私はPHPでこれを数える方法の周りに私の脳をラップしてきた、と私は必要な結果を得ることはありません。

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

明らかに1つの列が生成されます。したがって、レコードが10に達した場合は、新しい列を作成します。つまり、返された結果が12の場合、2つの列があります。私は22の結果がある場合、私は3つの列を持っている、など。

答えて

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"; 
} 
0

興味深い質問;私の最初の2つの刺し傷は間違っていた(下記のコメントに見られるように)。私はあなたが要素を一緒に連結するのではなく、代わりに適切なテーブルを作成したいと思っています。もし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>"; 
} 
?> 
+0

質問には答えません。 – markus

+0

良い点..あまりにも速く読んでください。私の答えを編集しました。 – kander

+0

新しい列の代わりに10個の要素ごとに新しい行を作成するようになりました。私の解決策は正しいと思います。 – markus

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> 
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"; 
    }