Codeigniter:具有连接和限制的复杂查询

时间:2018-05-15 11:27:02

标签: php mysql codeigniter

我在codeigniter中的查询如下所示,

$select = 'msg.*';
 $this->db->select($select, FALSE)
   ->from(TBL_MESSAGES . ' as msg')
   ->join(TBL_PRODUCT . ' as p', 'msg.ProductId=p.Id');        
   $query = $this->db->order_by('msg.Id', 'DESC')->get();
  if ($query->num_rows() > 0) 
  {
      return $query->result_array();
  }

这里我想要结果,前10个产品的所有消息, 但在上面的查询中,如果我放置limit,那么它会显示总共10条消息

任何人都可以帮助我如何限制上述查询吗?

2 个答案:

答案 0 :(得分:1)

希望这会对您有所帮助:

要么这样:

首先收集您的10个产品ID并使用images

将其用于上述查询
where_in

或者您可以使用$product_ids = $this->db->select('Id')->limit(10)->get(TBL_PRODUCT)->result_array(); /* to select most recent msg with product id and name do like this, correct if product_name column is wrong*/ $select = 'msg.*,p.Id,p.product_name'; /*$select = 'msg.*';*/ $query = $this->db->select($select, FALSE) ->from(TBL_MESSAGES . ' as msg') ->join(TBL_PRODUCT . ' as p', 'msg.ProductId=p.Id') ->where_in('p.Id',$product_ids) ->order_by('msg.Id', 'DESC') ->get(); if ($query->num_rows() > 0) { return $query->result_array(); } 子句获取所有产品ID并循环显示

where

更多信息:https://www.codeigniter.com/user_guide/database/query_builder.html#looking-for-specific-data

答案 1 :(得分:0)

为了获得所需的结果集,有两种方法

1)首先获取前10个产品的ID,然后在您的查询中添加过滤器where p.id IN(ids....)。这将涉及2个查询。

2)将加入消息表与子选择,选择10个产品,如

select msg.*
from messages msg
join (
    select *
    from products
    order by id
    limit 10
) p
on msg.ProductId=p.Id

不确定如何以活动记录格式转换此查询。