2017-02-25 1 views
1

Guten Morgen,PDO: Gruppe eine Eigenschaft anstelle von doppelten Linien

Ich habe eine Anfrage, die mich einige Informationen für eine Reservierung und jede Reservierung zurückkehren können auf mehrere Zimmer verbunden werden.

Ist es möglich, eine Reihe von Raum zu haben statt die Zeile jedes Mal zu duplizieren, wenn sie mehrere Räume für eine Reservierung sind.

Was ich will:

[ 
    idReservation1 => [ 
     "client_name" => "mathieu bortolaso", 
     "checkin" => "2017-08-08", 
     "d_checkout" => "2017-08-10", 
     "email" => "[email protected]", 
     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" => "[email protected]", 
     "room_id" => [1,12,13,9]//here I want an array 
    ] 
] 

wenn die idReservation nicht der Schlüssel ist, spielt es keine Rolle, hier die wichtig ist für room_id ein Array zu haben Ich habe alle PDO-Modi holen sah, aber sie nicht scheint passend zu meinem Problem.

Meine Anfrage:

$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 
     "); 

Dank

Antwort

1

Unter der Annahme, dass Sie mit MySql arbeiten: die Lösung mit GROUP_CONCAT Funktion (zur Gruppe Raum ids für jeden Reservierung):

$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; 
} 
+0

Danke, es ist e xactly, was ich brauchte – bormat

+0

@bormat, du bist willkommen – RomanPerekhrest

Verwandte Themen