You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:55:23