2012-05-09 39 views
2

我試圖將返回的每行的查詢結果顯示爲三列。CSS/PHP/MySQL - 將結果顯示爲3列

設置是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股利。

Columns B through Y in middle 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? 
       } 
     } 
} 

我真的不知道在哪裏甚至開始。

回答

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> 

乾杯!

+0

嗨,夥計。這看起來不錯。你認爲做兩次工作會阻礙業績嗎?您提供的示例創建數組然後顯示它們。在while循環中顯示結果與創建數組然後像在這裏顯示它們一樣顯示它們(我正在做數千行數據的工作)時,這種差異是否會顯着? – Norse

+0

@Norse好吧,通過這樣做,我試圖維護未來使用的代碼。另一種選擇是將所需的字符串放在'$ column ['..']'中,然後補充它。例如。 '$ column ['A']。= $ row ['name']。 '
';'。這會更快,但再次 - 閱讀和維護這種代碼更加困難。 – MJA

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

這裏有很多選擇。但是,因爲我會這樣做,使3或1陣列(S),然後在我的模板迭代它們在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> 

類似的東西,OFC可以爲空等添加檢查那裏。

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>