2016-11-24 105 views
0

當談到SQL時,我是一個新手,所以請原諒我對這個問題的無知。我有一個數據庫,其中包含一個PassengerBooking,Booking_DetailsTicket表。根據條件可以生成多個記錄嗎?

在Booking表中,我有一個屬性叫做noOfPassengers。我想要實現一種情景,其中,家庭的乘客預訂機票使得一個預訂ID(在預訂表中)將根據numberOfPassenger是否大於1而在乘客和機票表中生成多個記錄。

如何做到我在SQL中完成了這個?我知道表之間需要一些連接,但我不確定SQL命令的結構。

+0

這通常會在應用程序級別或通過使用「while」循環的存儲過程完成。 –

+0

如果你向我們展示ERD會更好...... – barudo

+0

你可以通過一個'INSERT' /'SELECT'生成多行,其中後者可以或不可以成爲'JOIN'的一部分......你想讓我顯示你舉個例子嗎? – Drew

回答

0

你會這樣做,而不是SQL。下面是一個例子:

<?php 
//connect to dbh 
$dbh = new PDO($dsn, $user, $password); 
/** 
* @param array $data 
*/ 
function addBooking($data) 
{ 
    global $db; 
    $booking_id = false; 
    //add any other fields you have too. 
    $sth = $db->prepare('INSERT INTO Bookings (name,date) 
    VALUES (:name,:date);'); 
    $sth->bindParam(':name', $data['name'], PDO::PARAM_STR); 
    $sth->bindParam(':date', $data['name'], PDO::PARAM_STR); 
    // and bind any other fields you have. 
    if ($sth->execute()) { 
     $booking_id = intVal($db->lastInsertId()); 
     $sql = ''; 
     $failed = false; 
     foreach ($data['passengers'] as $key => $passenger) { 
      //add any other fields you have too. 
      $sth = $db->prepare('INSERT INTO Passengers (name,booking_id) 
    VALUES (:name,:booking_id);'; 
      $sth->bindParam(':name', $passenger['name'], PDO::PARAM_STR); 
      $sth->bindParam(':date', $booking_id, PDO::PARAM_INT); 
      // and bind any other fields you have. 
      $sth->execute(); 
     } 
    } 
    return $booking_id; 
} 

function getBooking($booking_id) 
{ 
    global $db; 
    //add any other fields you have too. 
    $sth = $db->prepare(' 
    SELECT 
     Bookings.name as booking_name, 
     Bookings.date as booking_date, 
     Passengers.* FROM Bookings 
    RIGHT JOIN Passengers on Bookings.id = Passengers.booking_id 
    WHERE Bookings.id = :id;'); 
    $sth->bindParam(':id', $booking_id, PDO::PARAM_INT); 
    $result = $sth->fetch(PDO::FETCH_ASSOC); 
    $booking = array(
     'name' => $result[0]['booking_name']]], 
     'name' => $result[0]['booking_date']]], 
     'passengers' => array() 
    ); 
    foreach ($result as $row) { 
     if (isset($row['name'])) { 
      $booking['passengers'][] = array(
       'name' => $row['name'] 
      ); 
     } 

    } 
    return $booking; 
} 

/** 
* Usage 
*/ 
$data = array(
    'name' => 'Taxi', 
    //other data here too 
    'passengers' => array(
     'name' => 'Antony' 
     //other data here too 
    ) 
); 
$booking_id = addBooking($data); 

$booking = getBooking($booking_id); 

所以,你需要這樣的事情對你的表結構

Passengers 
id | name | booking_id 

Bookings 
id | name | date 

你實際上並不需要存儲乘客的數量,你可以發現,很容易出使用一個問題;

此外,此代碼可能有錯誤。但你應該能夠以此爲出發點。

+0

@barudo。我在哪裏可以發佈ERD給你看我的表格結構?我正在尋找一個''添加附件''鏈接或按鈕,但看不到任何。 – Jockfaire

+0

@Jockfaire我已經更新了我的答案以顯示一個實際示例,您只需添加實際列 –

+0

謝謝安東尼。當我在預訂表中已經有乘客ID作爲外鍵時,在乘客表中是否有必要或適當地存有預訂ID? – Jockfaire

相關問題