我的数据库中有两个表“tbl_room_info”& “tbl_room_image”。
现在我想从我的tbl_room_info表中获取所有房间信息,并从tbl_room_image表中计算我的房间图像编号。例如,考虑tbl_room_info有1条记录,其中room_id为'2',而tbl_room_image也有相同的room_id有5个房间图像。我想在我的视图页面中实现所有信息,如下所示:
房间名称|房间详情|房间图片编号
1 room details 5
2 room details 6
我的问题是我可以通过正常的mysql查询得到这个:
SELECT `tbl_room_info`.*, COUNT('tbl_room_image.*') AS imc FROM (`tbl_room_info`, `tbl_room_image`) WHERE `tbl_room_info`.`room_id` = tbl_room_image.room_id GROUP BY `tbl_room_info`.`room_id`
但我想要这个codeigniter活动记录格式。这是我的查询,它没有正常工作。请帮忙
$this->db->select('tbl_room_info.*', 'count(tbl_room_image.*) as imc');
$this->db->from('tbl_room_info, tbl_room_image');
$this->db->where('tbl_room_info.room_id = tbl_room_image.room_id');
$this->db->group_by('tbl_room_info.room_id');
return $this->db->get()->result();
这是我的观点:
<tbody>
<?php foreach($roomlists as $roomlist){?>
<tr>
<td><?php echo $roomlist->room_type;?></td>
<td><?php echo $roomlist->room_name;?></td>
<td><?php echo $roomlist->room_details;?></td>
<td>Total Pictures <span class="badge"><?php echo $roomlist->imc;?></span></td>
</tr>
<?php }?>
</tbody>
答案 0 :(得分:2)
使用Active Record的JOIN - $this->db->join();
。请尝试以下 -
$this->db->select('tbl_room_info.*, count(tbl_room_image.room_image_path) as imc', FALSE);
$this->db->from('tbl_room_info');
$this->db->join('tbl_room_image', 'tbl_room_info.room_id = tbl_room_image.room_id');
$this->db->group_by('tbl_room_info.room_id');
$query = $this->db->get();
echo $this->db->last_query(); exit; // print resulting query
print_r($query->result()); exit; // check resulting array
if($query->num_rows() > 0)
return $query->result();
return false;
编辑(答案解释):
$this->db->select();
中的第二个参数(可选)实际上是boolean
值(应为TRUE / FALSE)。默认情况下,该值为 TRUE
。 TRUE
表示使用 backticks
保护选择内的任何内容。 FALSE
表示相反,即阻止 backticks
保护它。为什么我们这样做,因为我们在选择中添加了 COUNT
,它受到 backticks
的保护,即 {{ 1}} ,这肯定是 COUNT(tbl_room_image.room_image_path) as imc
错误。