2012-05-09 6 views
2

返された各行に対して3つの列にクエリの結果を表示しようとしています。CSS/PHP/MySQL - 結果を3列に表示

セットアップは3つのすべての浮動の左の中に1つの大きなラッパーです。簡単ですね、ええ?

#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 divにする必要があります。

Columns B through Ymiddle div

Column Zright 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

ハイメイト。これは素晴らしく見えます。あなたは、仕事が2倍になることによってパフォーマンスが妨げられると思いますか?指定した例は、配列を作成して表示します。違いは、 '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の配列を作成し、次にテンプレートに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>