0

我试图找出一种将 mySQL 行拆分为 HTML 列的方法。很抱歉,如果有更简单的方法可以问这个问题,但我无法解决这个问题。

我已经阅读了很多建议,尽管它们都不符合我的要求。我知道将信息浮动到左侧并让它自行堆叠是非常容易的。我的问题是我用两张不同大小的卡片以“卡片”形式显示信息,我希望它们都垂直堆叠而没有间隙。

为了展示这一点,我给每张卡片分配了一个 1-3 的数字。每张编号为 1 的卡片都应该放在第一列,依此类推。这里的例子

正常向左浮动给了我这样的东西:

|1|2|3|
|4|5|6|
|7|8|9|

这是显示信息的正确方法,但它会在大卡片与小卡片旁边的位置留下空白,如示例中所示。

如果我在 php 中使用带有表格或 div 的 foreach 循环,我会得到如下信息:

|1|2|3|
-------
|4|5|6|
-------
|7|8|9|

不幸的是,这几乎是相同的结果。较大的卡片向下推动行,在较小的卡片所在的位置留下很大的间隙。

我也明白,在第一个可见行之后,最近的 div 可能会在一个列而不是另一列中被推得更远。例如,如果第 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 中做一个基本上说:“如果 $count == 1,将此信息附加到第 1 列,如果 $count == 2,将其附加到第 2 列,等等。”

是否有任何类型的函数可以像这样拆分这些信息并附加信息而不完全构建一个全新的行?

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'> &nbsp; </div>";
            } else {
                $flaggedDiv = "<div class='flagInnapropriate'> &nbsp; </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 格式。

另一个编辑:

我相信我只需要进行三个 mySQL 查询来选择每 n 行。是的,行上的 ID 是唯一的,但是有可能某些行将移动到另一个表中,这会留下间隙。

我现在想的是查询表,每三行拉一次,将其放在第 1 列中,依此类推,从第一个条目开始。

编辑 3:我正在寻找的是执行一个 SQL 查询,该查询从第 1 行开始每隔三行获取所有信息,然后我需要从第 2 行开始每隔三行执行一次查询,然后相同对于第 3 行。

4

1 回答 1

0

float:left;在你的文件中使用

   http://beta.mybattlereport.com/styles/global.css

线82
类容器

编辑 :

第一:那些编号为 1,2,3 的卡都具有相同的类别card normal,因此如果您对一张卡应用更改,它将应用于所有卡

解决方案:尝试使用表格而不是 div。

第二:你的卡片是这样排列的

 card1 card2 card3  featured card , card1 card2 card3 featured card

解决方案:这也可以通过表格固定,您订购它们 1 列将用于卡 1 2 列将用于卡 2 3 列将用于卡 3 然后您可以在此下使用其他表作为特色卡或 div。

编辑2>

您的问题是在 sql 中获取由卡片数量和特色生成的卡片,您应该首先按特色排序,然后按投票排序

尝试这个

   $qry_questions = mysql_query("SELECT * FROM mbr_qa_questions ORDER BY q_featured ,q_votes DESC" /* LIMIT 0, 10"*/); 

数字 1 和 2 和 3 你只是给每张卡数字。所以我从这些数字中看不出你为什么要制作它们的任何目的。

于 2012-12-18T08:24:37.750 回答