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

CodeIgniter关联查询问题:如何获取前10个产品的全部消息

解决CodeIgniter中获取前10个产品所有消息的问题

你遇到的问题很典型——直接给主查询加limit(10)只会返回10条消息,而不是10个产品的全部消息。要实现需求,我们需要分两步走:先拿到前10个产品的ID,再用这些ID去筛选对应的所有消息。

步骤1:获取前10个产品的ID列表

首先,我们需要单独查询出你想要的前10个产品的ID(这里假设你按产品ID倒序排序,你可以根据实际需求调整order_by的字段和排序方向):

// 获取前10个产品的ID
$this->db->select('Id');
$this->db->from(TBL_PRODUCT);
$this->db->order_by('Id', 'DESC'); // 可根据你的需求调整排序规则(比如按创建时间、销量等)
$this->db->limit(10);
$product_query = $this->db->get();

$product_ids = [];
if ($product_query->num_rows() > 0) {
    foreach ($product_query->result_array() as $product) {
        $product_ids[] = $product['Id'];
    }
}

步骤2:根据产品ID查询所有对应的消息

拿到产品ID列表后,我们再用where_in来筛选属于这些产品的所有消息,同时保留你原来的关联和排序逻辑:

if (!empty($product_ids)) {
    $select = 'msg.*';
    $this->db->select($select, FALSE)
             ->from(TBL_MESSAGES . ' as msg')
             ->join(TBL_PRODUCT . ' as p', 'msg.ProductId=p.Id')
             ->where_in('msg.ProductId', $product_ids) // 关键:只保留指定10个产品的消息
             ->order_by('msg.Id', 'DESC');
    $query = $this->db->get();

    if ($query->num_rows() > 0) {
        return $query->result_array();
    }
}

return []; // 如果没有找到产品或消息,返回空数组

补充说明

  • 如果你的“前10个产品”有特定的排序规则(比如按产品创建时间、销量排序),只需要调整第一步查询中的order_by参数即可。
  • 使用where_in可以确保我们完整获取这10个产品下的所有消息,不会因为直接给主查询加limit而截断消息数据。

内容的提问来源于stack exchange,提问作者hetal gohel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:53:47