【问题标题】:Need to stop while loop after 50 loops循环 50 次后需要停止 while 循环
【发布时间】:2014-02-26 23:12:39
【问题描述】:

我正在使用 while 循环在 sql 表中显示数据,并对列表项中每一行的数据进行分组。在显示 sql 表中的 50 行后,我需要停止循环。如果有帮助,$id 是唯一的,并且对于每一行。

    <?php
            include("db.php");
            $query="SELECT * FROM `stories`";
            $result=mysqli_query($connection,$query);
            ?>

            <li>

            <?php
            while ($data = mysqli_fetch_assoc($result)):
            $id = $data['id'];
            $img_link = $data['img_link'];
            $page_path = $data['page_path'];
            $tag_alt = $data['tag_alt'];
            $category = $data['category'];
            if(is_null($page_path)){$page_path = "#";}
            ?>

            <img alt="<?php echo $tag_alt; ?>" src="<?php echo $img_link; ?>" width="200" height="200">

            <h3><a href="#"><?php echo $title; ?></a></h3>
            <a href="categories/<?php echo $category; ?>.html"><label> </label><?php echo $category; ?></a></span>
            <p><?php echo $tag_alt; ?></p>

            </li>
                            <?php
            endwhile;
            mysqli_close($connection);
            ?>

【问题讨论】:

  • 你为什么不把LIMIT 50放在SQL里?
  • $query = "SELECT * FROM stories LIMIT 50";

标签: php mysql


【解决方案1】:

第一个选项是你可以像这样使用LIMIT 50

 $query="SELECT * FROM `stories` LIMIT 50";

第二个是如果你不想使用 LIMIT 50,你可以维护一个计数器变量

 <?php
            $counter = 0;
            while ($data = mysqli_fetch_assoc($result))
            {
                $counter+=1;
                $id = $data['id'];
                $img_link = $data['img_link'];

                 if($counter>50)
                 {
                        break;
                 } 

【讨论】:

  • 在查询本身中对数据进行排序/限制几乎总是更好,这样您就可以避免在 PHP 代码中这样做。让你的代码更干净,IMO。 +1
【解决方案2】:

在查询中你可以这样给出。

(如果是sqlserver):

$query="SELECT TOP 50 * FROM `stories`";

(如果是Mysql或postgre):

$query="SELECT * FROM `stories` LIMIT 50 ";

如果你想在下一页显示结果 51 到 100,你应该将页码或计数器传递给一个页面,并且你应该稍微改变你的 sql。

【讨论】:

    【解决方案3】:

    这是你的解决方案吗??

    $i=1;
     while ($data = mysqli_fetch_assoc($result) && $i <= 50):
    {
      //Code Here
      $i++;
    }
    

    【讨论】:

      【解决方案4】:

      理想的方式应该是限制为 50 的查询

       $query="SELECT * FROM `stories` LIMIT 50 ";
      

      但是,如果由于某种原因您需要在同一页面中使用您的数组,并且您只想在这种情况下显示前 50 个,您可以执行以下操作:

       while ($data = mysqli_fetch_assoc($result)){
          $array[]=$data;
       }
      
      for($i=0;$i<=49;$i++){
          $id = $array[$i]['id'];
           //etc...
      }
      

      【讨论】:

        【解决方案5】:

        在这里感谢大家的帮助。使用 LIMIT 功能似乎效果最好。我添加了 BETWEEN 和 RAND 来改进功能。

        <?php include("db.php"); $query="SELECT * FROM `stories` WHERE id BETWEEN 1 AND 200 order by RAND() LIMIT 20"; $result=mysqli_query($connection,$query); ?
        

        再次感谢您,没有什么比在 StackOverflow 上找到的有才华的服务更好的了

        【讨论】:

          【解决方案6】:
           $query="SELECT * FROM `stories`";
          

          替换为

           $query="SELECT * FROM `stories` LIMIT 50 ";
          

          【讨论】:

          • 我没有在问题中提到它,但我想在“50 组”行中显示数据,并使用一些上一个/下一个按钮一次移动 50 个。我不认为这个限制会起作用?
          • 你需要为它分页。
          • @buzrw 如果你想分页你需要先把你分页的html放上
          猜你喜欢
          • 2022-10-31
          • 1970-01-01
          • 2015-10-20
          • 1970-01-01
          • 2012-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多