我在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条消息
任何人都可以帮助我如何限制上述查询吗?
答案 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
不确定如何以活动记录格式转换此查询。