mysql连接两个表,一个表有多个匹配的行

时间:2014-06-19 10:48:27

标签: php mysql join

我正在尝试加入两张桌子。让我们说第一个表是test1而另一个是test2 在test1表中我有字段 HOTEL_ID 名称 市 COUNTRY

然后在test2表中我有 ROOM_ID HOTEL_ID ROOM_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匹配的每种房型的酒店名称,但我想在所有房型中显示酒店名称一次。我该怎么做到这一点?

谢谢

2 个答案:

答案 0 :(得分:2)

问题标记为“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;

对于每家酒店,这将生成一个列,其中列出了酒店的房型类型。

答案 1 :(得分:0)

您使用相同的查询,因为它只是通过酒店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>

等等