【问题标题】:PDO: group a property instead of duplicate linesPDO:对属性进行分组而不是重复行
【发布时间】:2017-02-25 21:21:46
【问题描述】:

早上好,

我有一个请求,向我返回几个预订信息,每个预订可以链接到多个房间。

是否可以有一个房间数组而不是在每次预订多个房间时重复该行。

我想要什么:

[
    idReservation1 => [
        "client_name" => "kévin titi",
        "checkin" => "2017-08-08",
        "d_checkout" => "2017-08-10",
        "email" => "titi@gmail.com",
        room_id => [1,2,3,9]//here I want an array
    ],
    idReservation2 => [
        "client_name" => "firstname lastname",
        "checkin" => "2017-08-18",
        "d_checkout" => "2017-08-20",
        "email" => "toto@gmail.com",
        "room_id" => [1,12,13,9]//here I want an array
    ]
]

如果idReservation不是key也没关系,这里重要的是有一个room_id数组 我查看了所有 PDO 获取模式,但它们似乎与我的问题不匹配。

我的要求:

 $prep = $this->pdo->prepare("
            SELECT re.id as resId, re.client_name, re.d_checkin, re.d_checkout, re.mail, ro_re.room_id as room
            FROM Reservation re
            JOIN Room_Reservation ro_re ON ro_re.reservation_id = re.id
            WHERE re.confirmed = false
        ");

谢谢

【问题讨论】:

    标签: php arrays pdo


    【解决方案1】:

    假设您正在使用 MySql:使用 GROUP_CONCAT 函数的解决方案(为每个 reservation 分组 room id):

    $stmt = $this->pdo->prepare("
                SELECT 
                    re.id as resId, re.client_name, re.d_checkin, re.d_checkout, re.mail, 
                    GROUP_CONCAT(ro_re.room_id SEPARATOR ',') AS room_ids
                FROM 
                    Reservation re
                    INNER JOIN Room_Reservation ro_re ON ro_re.reservation_id = re.id
                WHERE re.confirmed = false
                GROUP BY re.id
    ");
    
    $stmt->execute();
    
    // `room_ids` column will contain a string like "1,2,3,9"
    $result = [];
    foreach ($stmt->fetchAll(\PDO::FETCH_ASSOC) as $row) {
        $row['room_ids'] = explode(',', $row['room_ids']);  // converting string with room ids into array
        $result[] = $row;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-28
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 2021-03-10
      • 2017-03-14
      • 2023-04-06
      相关资源
      最近更新 更多