如何拆分mySQL信息以在HTML列中显示

时间:2012-12-18 08:16:47

标签: php html mysql css

我试图想出一种将mySQL行拆分为HTML列的方法。我很抱歉,如果有一种更容易的方式来问这个问题,但我无法绕过它。

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

为了表明这一点,我给每张卡片一个1-3的数字。每个编号为1的卡应该适合第一列,依此类推。 example here

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

|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中发表声明,基本上说: “if $ count == 1,将此信息附加到第1列,如果$ count == 2,则将其附加到第2列,等等”

我是否可以使用任何类型的功能来分割这些信息,并附加信息而不完全构建一个新行?

P.S。我尝试过没有正确结果的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格式。

另一个编辑:

我相信我只需要制作三个选择每第n行的mySQL查询。是的,行上的ID是唯一的,但有些行可能会移动到另一个会留下空白的表。

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

编辑3: 我正在寻找的是做一个SQL查询,从第1行开始抓取每三行的所有信息,然后我需要对第三行进行另一个查询,从第2行开始,然后对第3行进行相同的查询

1 个答案:

答案 0 :(得分:0)

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

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

82
类容器

编辑:

首先:那些号码为1,2,3的卡片都有相同的班级card normal所以如果您对一张卡片进行更改,它将会更改为所有卡片

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

第二名:您的卡片按照

的顺序排列
 card1 card2 card3  featured card , card1 card2 card3 featured card

解决方案:这也可以通过表格来修复,然后对它们进行排序  1列将用于card1 2列将用于card2 3列将用于card3 然后你可以使用其他表格下的特色卡片或div。

EDIT2&GT;

你的问题是在sql中获取由卡片数量和特征生成的那些卡片 你应该先通过推荐然后通过投票来订购它们

试试这个

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

数字1和2以及3只是为每张卡提供数字。所以我没有看到这些数字的任何目的,为什么你要制作它们。