1

私の「人気のあるタグ」ページでは、この PHP と SQL を使用してデータベースからすべてのタグを、最も人気のあるものから最も人気のないものの順にフェッチしています。

$sql = "SELECT t.tagid, t.name, t.desc, COUNT(qt.id) AS total
        FROM tags t
        LEFT JOIN question_tags qt ON t.tagid=qt.tag_id
        GROUP BY t.tagid, t.name
        ORDER BY total DESC";

$result = mysql_query($sql) or die(mysql_error());

while($row=mysql_fetch_assoc($result)) {
  echo '<div class="tag-list-box" id="tag-'.$row['tagid'].'">
        <a href="/tags/'.strtolower($row['name']).'" class="tag">
        <span class="label label-inverse label-tag">'.strtolower($row['name']).'</span>
        </a> <strong>&times; '.$row['total'].'</strong><br />
        <p>'.($row['desc']!==null ? $row['desc'] : '<em>This tag has no description.</em>').'</p>
        </div>';
}

div と CSS を使用してより「現代的な方法」で実行できると思ったので、現在 HTML テーブルにはありませんが、下のスクリーンショットでわかるように、タグにボックスの高さが他よりも大きいため、説明:

ここに画像の説明を入力

ボックスの私の CSS は次のとおりです。

.tag-list-box {
  width: 20%;
  padding: 5px;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
  float: left;
  margin-right: 2%;
  margin-bottom: 10px;
}

問題を解決する必要があるテーブルに配置する必要があると考えていますが、クエリの4行ごとに独自のものを作成して<tr>、各テーブル行に4つ存在できるようにするにはどうすればよいですか?

私はそれを理解することができません - 私はループでカウントしてインクリメントしようとしましたwhileが、そこからどこに行くべきかわかりません.

4

2 に答える 2

2

モジュロ演算子を使用して、カウントが 4 で割り切れるかどうかを確認します。

if($count % 4 == 0) 

CSS ソリューションを維持したい場合は、div の高さを設定し、オーバーフローを非表示に設定して、長すぎる説明を処理することもできます。

于 2012-06-15T18:17:03.727 に答える
1

ええ、スコットが言ったように、あなたが4列に並んでいるかどうかを確認します。divを使用できます。4ごとに、左側のフロートをクリアするdivを追加するだけです。アイテムの高さがわからないので、設定した高さは使用しません。私がすることの例:

$count = 0;
while($row=mysql_fetch_assoc($result)) {
  echo '...'; //YOUR CURRENT ECHO STATEMENT HERE
  $count++;
  if($count % 4 == 0) echo "<div style='clear: left;'></div>";
}
于 2012-06-15T18:47:55.473 に答える