doutang7414 2018-05-21 10:41 采纳率: 0%
浏览 70
已采纳

从数据库中获取随机结果并插入列中

I'm trying to generate 6 column and 9 row long movie grid with random results from database on each user visit. I easily get random 54 results but I'm not able to separate results and insert them in 6 column as 9 row in each column. I was trying to break and continue while loop but no luck. How can I achieve this? Maybe I should run loop inside loop? My current code looks like this:

<?php
$i = 0;
$sql = "SELECT * FROM Movies ORDER BY RAND() LIMIT 54";
$gridmovies = $mysqli->query($sql);
if ($gridmovies->num_rows > 0) {
    while($row = $gridmovies->fetch_assoc()) {
        $i++
?>
            <div class="column" style="margin-top: 0px;">
              <a href="/similar/<?php echo $row['ImdbID']; ?>" class="item-card">
                <div class="overlay ov-show">
                  <div class="icon"><i class="fa fa-heart"></i></div>
                </div>
                <img src="<?php echo $row['PosterURL']; ?>" alt="<?php echo $row['EngTitle']; ?> / <?php echo $row['GeoTitle']; ?>">
              </a>          
            </div>
            <?php if ($i == 9) {break;} ?>
            <div class="column" style="margin-top: 40px;">
              <?php continue; ?>
              <a href="/similar/<?php echo $row['ImdbID']; ?>" class="item-card">
                <div class="overlay ov-show">
                  <div class="icon"><i class="fa fa-heart"></i></div>
                </div>
                <img src="<?php echo $row['PosterURL']; ?>" alt="<?php echo $row['EngTitle']; ?> / <?php echo $row['GeoTitle']; ?>">
              </a>
            </div>
            <?php if ($i == 18) {break;} ?>
            <div class="column" style="margin-top: 80px;">
              <?php continue; ?>
              <a href="/similar/<?php echo $row['ImdbID']; ?>" class="item-card">
                <div class="overlay ov-show">
                  <div class="icon"><i class="fa fa-heart"></i></div>
                </div>
                <img src="<?php echo $row['PosterURL']; ?>" alt="<?php echo $row['EngTitle']; ?> / <?php echo $row['GeoTitle']; ?>">
              </a>
            </div>
             <?php if ($i == 27) {break;} ?>
            <div class="column" style="margin-top: 120px;">
              <?php continue; ?>
              <a href="/similar/<?php echo $row['ImdbID']; ?>" class="item-card">
                <div class="overlay ov-show">
                  <div class="icon"><i class="fa fa-heart"></i></div>
                </div>
                <img src="<?php echo $row['PosterURL']; ?>" alt="<?php echo $row['EngTitle']; ?> / <?php echo $row['GeoTitle']; ?>">
              </a>
            </div>
            <?php if ($i == 36) {break;} ?>
            <div class="column" style="margin-top: 160px;">
              <?php continue; ?>
              <a href="/similar/<?php echo $row['ImdbID']; ?>" class="item-card">
                <div class="overlay ov-show">
                  <div class="icon"><i class="fa fa-heart"></i></div>
                </div>
                <img src="<?php echo $row['PosterURL']; ?>" alt="<?php echo $row['EngTitle']; ?> / <?php echo $row['GeoTitle']; ?>">
              </a>
            </div>
            <?php if ($i == 45) {break;} ?>
            <div class="column" style="margin-top: 200px;">
              <?php continue; ?>
              <a href="/similar/<?php echo $row['ImdbID']; ?>" class="item-card">
                <div class="overlay ov-show">
                  <div class="icon"><i class="fa fa-heart"></i></div>
                </div>
                <img src="<?php echo $row['PosterURL']; ?>" alt="<?php echo $row['EngTitle']; ?> / <?php echo $row['GeoTitle']; ?>">
              </a>
            </div>            
<?php
    } $gridmovies->free();
} else {
  echo 'error';
}
?>
  • 写回答

1条回答 默认 最新

  • doutou7740 2018-05-21 11:00
    关注

    First try to get your results in one place and display them in other so you have some separation in your code like so:(believe me, this will help you in the future)

    $sql = "SELECT * FROM Movies ORDER BY RAND() LIMIT 54";
    $gridmovies = $mysqli->query($sql);
    $movies = [];
    if ($gridmovies->num_rows > 0) {
        while ($row = $gridmovies->fetch_assoc()) {
            $movies[] = $row;
        }
    }
    

    In order to make a grid(a two dimensional entity) you need two loops (each loop for each dimension). One for rows and one for columns like so:

    $rows = 9;
    $columns = 6;
    $index = 0;
    for ($i = 0; $i < $columns; $i++) {
        if (!isset($movies[$index])) {
            break;
        }
        ?>
        <div class="column">
        <?php
        for ($j = 0; $j < $rows; $j++) {
            if (isset($movies[$index])) {
                $row = $movies[$index];
                // your html here
                ?>
                    <a href="/similar/<?php echo $row['ImdbID']; ?>" class="item-card">
                        <div class="overlay ov-show">
                            <div class="icon"><i class="fa fa-heart"></i></div>
                        </div>
                        <img src="<?php echo $row['PosterURL']; ?>" alt="<?php echo $row['EngTitle']; ?> / <?php echo $row['GeoTitle']; ?>">
                    </a>
                <?php
            } else {
                break;
            }
            $index++;
        }
        ?>
        </div >
        <?php
    }
    

    This way you avoid duplicating code. Everything is generated and if you want to change the format of the grid in 4 by 4 for example, it's easy, you just change the $rows and $columns variables.

    EDIT Take a look at this example and how it is generated : IDEONE

    This code is not tested. It may need some tweaks

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教