2

クエリの結果を、返された行ごとに 3 つの列に表示しようとしています。

セットアップは 3 つの div で、すべてが 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連想クエリがあります。

簡単にするために、 divColumn Aに入れる必要があります。left

Columns B through Ymiddle div

Column Z部門でright

これが私のクエリです:

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?
              }
        }
}

どこから始めればいいのか本当にわかりません。

4

4 に答える 4

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>

乾杯!

于 2012-05-09T03:58:21.710 に答える
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>
于 2012-05-09T04:01:17.263 に答える
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>

そのようなもの、そこに空などのチェックを追加できます。

于 2012-05-09T04:01:06.617 に答える
-1

私はこれとまったく同じことをしましたが、結果を表にまとめました。ヘルパー カウンター変数でモジュラス関数を使用しました。

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++;
}
?>
于 2012-05-09T04:00:55.280 に答える