PHP SQL分类重复显示问题:按指定布局展示5个分类
解决分类重复显示、无法展示全部5个分类的问题
问题原因
当前代码的核心问题是两次独立的数据库查询逻辑错误:
- 第一个查询用
limit(4)获取前4个顶级分类 - 第二个查询用
limit(1)再次从数据库开头取1个分类,导致重复显示第一个分类,而非第5个分类
最终出现重复内容,且第5个分类从未被取出展示。
解决方案
一次性获取所有顶级分类(parent=0),再拆分显示前4个和第5个分类,既减少数据库请求次数,又能确保所有分类正确展示。
修正后的完整代码
<?php // 一次性获取所有顶级分类 $categories = $this->db->get_where('category', array('parent' => 0))->result_array(); // 可选:添加分类数量判断,避免索引越界 if(count($categories) >= 5): ?> <!-- 前4个分类:col-md-3布局 --> <div class="row"> <?php foreach(array_slice($categories, 0, 4) as $category): ?> <div class="col-md-3"> <div class="gallery-item"> <div class="grid-item-holder"> <div class="listing-item-grid"> <img src="<?php echo base_url('uploads/category_thumbnails/').$category['thumbnail'];?>" alt="" /> <div class="listing-counter"> <span>2</span>Locations </div> <div class="listing-item-cat"> <h3><a href="<?php echo site_url('home/filter_listings?category='.slugify($category['name']).'&&amenity=&&&video=0&&status=all'); ?>"><?php echo $category['name']; ?></a></h3> <p><?php echo $category['name']; ?></p> </div> </div> </div> </div> </div> <?php endforeach; ?> </div> <!-- 第5个分类:col-md-6布局 --> <div class="row"> <div class="col-md-6"> <?php $fifthCategory = $categories[4]; ?> <div class="gallery-item gallery-item-second"> <div class="grid-item-holder"> <div class="listing-item-grid"> <img src="<?php echo base_url('uploads/category_thumbnails/').$fifthCategory['thumbnail'];?>" alt="" /> <div class="listing-counter"> <span>2</span>Locations </div> <div class="listing-item-cat"> <h3><a href="<?php echo site_url('home/filter_listings?category='.slugify($fifthCategory['name']).'&&amenity=&&&video=0&&status=all'); ?>"><?php echo $fifthCategory['name']; ?></a></h3> <p><?php echo $fifthCategory['name']; ?></p> </div> </div> </div> </div> </div> </div> <?php endif; ?>
关键优化点
- 用
array_slice($categories, 0,4)直接从已获取的数组中截取前4个元素,避免重复查询数据库 - 通过
$categories[4]直接获取第5个分类(数组索引从0开始) - 添加
count($categories)>=5的判断,防止分类数量不足时出现索引越界错误(可根据业务需求调整)
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

