2011-01-16 4 views
1

간단한 mysql select 쿼리에서 긴 목록을 생성했습니다.
현재 (아래 코드에 표시) 각 레코드가있는 테이블 행 목록 만 작성하고 있습니다. 그래서 아무것도 복잡하지 않습니다.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> 

분명히 한 개의 열이 생성됩니다. 따라서 반환 된 레코드가 10에 도달하면 새 열을 만들고 싶습니다. 즉, 반환 된 결과가 12이면 두 개의 열이 있습니다. 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"; 
    }