我正在尝试连接两个表。假设第一个表是test1,另一个是test2在test1表中,我有字段HOTEL_ID名字城市国家
然后在test2表中我有ROOM_IDHOTEL_IDROOM_TYPE
所以大多数时候酒店有很多类型的房间。所以当我用这个查询
连接这两个表时$this->db->like('city', $visitingPlace);
$this->db->or_like('country', $visitingPlace);
$this->db->or_like('name', $visitingPlace);
$this->db->limit($per_page, $page);
$this->db->select('*')
->from('test1')
->join('test2', 'test1.hotel_id = test2.hotel_id', 'left');
$query = $this->db->get();
它重复显示与该酒店id匹配的每个房间类型的酒店名称,但我想在所有房间类型中显示一次酒店名称。我怎样才能做到这一点?
谢谢
这个问题被标记为"mysql",所以这里是一个mysql解决方案:
select h.*, group_concat(distinct room_type) as RoomTypes
from test1 h left join
test2 r
on h.hotel_id = r.hotel_id
group by h.hotel_id;
对于每个酒店,这将生成一个列,其中包含该酒店的房间类型列表。
您使用相同的查询,只是按酒店id添加订单,并在php中使用逻辑仅显示每组房间的酒店名称
$this->db->like('t1.city', $visitingPlace);
$this->db->or_like('t1.country', $visitingPlace);
$this->db->or_like('t1.name', $visitingPlace);
$this->db->limit($per_page, $page);
$this->db->select('t1.*,t2.ROOM_TYPE')
->from('test1 t1')
->join('test2 t2', 't1.hotel_id = t2.hotel_id', 'left')
->order_by('t1.hotel_id','ASC');
从查询
中获取结果$results = $this->db->get()->result();
为每组房间循环遍历结果存储酒店id并只显示一次
$currentParent = false;
foreach ($results as $r) {
if ($currentParent != $r->hotel_id ) {
echo '<h1>Hote Name ' . $r->name. '</h1>';
$currentParent = $r->hotel_id;
}
echo '<p>' .$r->ROOM_TYPE. '</p>';
}
的示例输出<h1>Hote Name test1</h1>
<p>room type 1</p>
<p>room type 2</p>
<h1>Hote Name test 2</h1>
<p> room type 3</p>
等等