mySQL 行を HTML 列に分割する方法を見つけようとしています。もっと簡単に尋ねる方法があれば申し訳ありませんが、頭を包むことはできません。
非常に多くの提案を読みましたが、探しているものに合うものはありません。情報をそのままフロートさせ、それ自体をスタックできるようにするのは非常に簡単であることを理解しています。私の問題は、サイズの異なる 2 枚のカードを使用して「カード」形式で情報を表示していて、それらをすべて垂直に隙間なく積み重ねたいということです。
これを示す目的で、すべてのカードに 1 ~ 3 の数字を付けました。1 の番号が付けられたすべてのカードは、最初の列に収まる必要があります。例はこちら
通常のフローティング左は、次のようなものです。
|1|2|3|
|4|5|6|
|7|8|9|
これは情報を表示する正しい方法ですが、例のように大きなカードと小さなカードの隣に隙間ができてしまいます。
テーブルまたは div を使用して php で foreach ループを使用すると、次のような結果が得られます。
|1|2|3|
-------
|4|5|6|
-------
|7|8|9|
残念ながら、これはほとんど同じ結果です。大きいカードは列を押し下げ、小さいカードがある場所に大きな隙間を残します。
また、最初の表示行の後、最新の div が別の列ではなく 1 つの列でさらに下にプッシュされる可能性があることも理解しています。たとえば、列 1 に 6 枚の「特集」カードまたは大型カードがある場合、その横のスペースを埋めるには 12 枚のカードが必要になります。私はこれについて心配していません。
私が今持っている基本的な簡素化されたコードは次のとおりです。
<div class="container">
<?PHP
$qry_questions = mysql_query("SELECT STATEMENT**");
$count = 0;
while($row = mysql_fetch_array($qry_questions)){
$count++;
/*GATHER INFORMATION*/
?>
<div class="HTML-formatting-here-with-php-echos">
</div>
<?PHP
}
?>
</div>
今、私はphpで基本的に言うステートメントを作成できるかどうかを理解しようとしています: ."
この情報をこのように分割し、まったく新しい行を完全に構築せずに情報を追加するために実行できる関数はありますか?
ps array_chunk() を試しましたが、適切な結果は得られませんでした。
編集:これがwhileループです
<div id="collective">
<div class="container">
<?PHP
//FIND THE QUESTIONS ASKED AND INFORMATION ON THEM
$qry_questions = mysql_query("SELECT * FROM mbr_qa_questions ORDER BY q_votes DESC" /* LIMIT 0, 10"*/); //LIMIT 0, 20 - 20 being how many to show at a time
$num_rows = mysql_num_rows($qry_questions);
$max_col = 3;
$count = 0;
//START THE LOOPING
while($q_row = mysql_fetch_array($qry_questions)){
$q_id = $q_row['q_id'];
$q_votes = $q_row['q_votes'];
$q_answers = $q_row['q_answers'];
$q_title = $q_row['q_title'];
$q_description = $q_row['q_description'];
$q_tags = $q_row['q_tags'];
$q_user_id = $q_row['user_id'];
$q_created = $q_row['q_created'];
$q_modified = $q_row['q_modified'];
$q_featured = $q_row['q_featured'];
if($q_featured == 0){
$q_status = "normal";
} else {
$q_status = "featured";
}
//GET THE USERS USERNAME
$qry_username = mysql_query("SELECT user_name FROM mbr_user_name WHERE user_id = '$q_user_id'");
$q_user_name = mysql_result($qry_username, 0);
//FIND THE USERS POINTS
$qry_points = mysql_query("SELECT point_amount FROM mbr_qa_points WHERE user_id = '$q_user_id'");
$q_user_points = mysql_result($qry_points, 0);
//FIND OUT IF YOU FLAGGED IT
$qry_flagged = mysql_query("SELECT * FROM mbr_qa_flagged WHERE q_id = '$q_id' AND user_id = '$user_id'");
$flagged = mysql_num_rows($qry_flagged);
if($flagged >= 1){
$flaggedDiv = "<div class='q_flagged'> </div>";
} else {
$flaggedDiv = "<div class='flagInnapropriate'> </div>";
}
//FIND HOW MANY ANSWERS
$qry_answers = mysql_query("SELECT * FROM mbr_answers WHERE q_id = '$q_id'");
$q_answers = mysql_num_rows($qry_answers);
//FIND HOW MANY VOTES
$qry_votes = mysql_query("SELECT * FROM mbr_votes WHERE q_id = '$q_id'");
$q_votes = mysql_num_rows($qry_votes);
//GIVE EACH ENTRY A COLUMN NUMBER
$count++;
if($count >= 4){
$count = 1;
}
<div class="card <?= $q_status ?>">
<div class="top">
<div class="tag">
<div class="title">Votes</div>
<div class="votes">
<div class="number">
<?= $q_votes ?>
</div>
</div>
<div class="plus">+</div>
</div>
<div class="question">
<p><?= $count/* . $q_title*/ ?></p>
</div>
</div>
<div class="middle">
<div class="elapsed">
<?PHP
$time_since = $q_created;
$time_now = time();
$timeElapsed = $time_now - $time_since;
?>
Asked <?= elapsedTime($time_since) ?> ago by
</div>
<a class="profile" href="./profile.php?profile_name=<?= $q_user_name ?>">
<div class="avatar">
<img src="pieces/avatars/avatar.php?profile_id=<?= $q_user_id ?>&size=xsmall" />
</div>
<div class="userName">
<?= $q_user_name ?>
</div>
<div class="points">
<?= $q_user_points ?>pts
</div>
</a>
</div>
<div class="bottom">
<div class="answer">
<div class="title">
Answers
</div>
<div class="numAnswers">
<?= $q_answers ?>
</div>
<div class="answersText">
Answers
</div>
</div>
<div class="bestAnswer">
<div class="title">
Best Answer
</div>
<div class="description">
<p>Need to get highest rated answer here</p>
</div>
</div>
</div>
</div>
}
?>
</div>
</div>
含まれている newAnswerLayout.php は、各カードの html フォーマットです。
別の編集:
n 行ごとに選択する 3 つの mySQL クエリを作成するだけでよいと思います。はい、行の ID は一意ですが、一部の行が別のテーブルに移動され、ギャップが残る可能性があります。
私が今考えているのは、最初のエントリから始めて、テーブルをクエリし、3 行ごとにプルし、それを列 1 に配置することです。
編集 3: 私が探しているのは、行 1 から始めて 3 行ごとにすべての情報を取得する SQL クエリを実行することです。次に、行 2 から始めて 3 行ごとに別のクエリを実行する必要があります。行 3 の場合。