while循环只传递第一个sql行

时间:2014-08-08 16:25:42

标签: php sql while-loop

源代码显示LIMIT要求的16个项目。但是,所有这些只是“类别”列中的第一项。如何才能显示列的前16行,而不仅仅是第一行。

<div id="contentContainer" class="trans3d">
  <?php include("../scripts/db.php");
    $query="SELECT category FROM stories LIMIT 16"; 
    $result=mysqli_query($connection,$query);
  ?>
     <section id="carouselContainer" class="trans3d">
  <?php   
      while($data=mysqli_fetch_assoc($result)):
            $genre=$data['category'];
            $genre_path=$genre.".php"; 
            $genre_img_path="../images/genre_images/".$genre.".jpg";
  ?>

<a href="$genre_path">
    <figure class="carouselItem trans3d">
        <?php echo $genre;?>
            <img src="<?php echo $genre_img_path;?>" alt=""/>
    </figure>
</a>
<?php 
     endwhile;
     mysqli_close($connection);
 ?>
        </section>

</div>

2 个答案:

答案 0 :(得分:2)

将查询更改为:

$query = "SELECT DISTINCT category FROM stories LIMIT 16";

这将确保您获得16个不同的类别。否则,选择哪16行是任意的,它可能会选择16个恰好属于同一类别的故事。

答案 1 :(得分:1)

如果您希望获得16个不同的类别(没有重复),则应使用关键字DISTINCT

SELECT DISTINCT category FROM stories LIMIT 16

如果您想要表category中16个第一行的stories(可能有重复项),那么您的请求是正确的。

如果问题是您没有得到您期望的类别,可能会尝试使用ORDER BY子句确保首先选择的行的正确排序。