2016-11-24 5 views
0

私はSQLに関しては初心者ですので、この質問に関して私の無知を許してください。私はPassenger,Booking,Booking_DetailsおよびTicketテーブルを含むデータベースを持っています。条件によっては複数のレコードを生成できますか?

予約テーブルには、noOfPassengersという属性があります。私は、numberOfPassengerが> 1であるかどうかに応じて、予約テーブルの1つの予約IDが乗客とチケットのテーブルに複数のレコードを生成するように、家族のためにチケットを予約するシナリオを実装したいと考えています。

私はSQLでこれを達成していますか?私は、いくつかの結合がテーブル間で必要となることを認識していますが、SQLコマンドの構造についてはわかりません。

+0

これは、通常、アプリケーションレベルで実行されるか、または「while」ループを使用するストアドプロシージャによって実行されます。 –

+0

私たちにERDを表示すると良いでしょう... – barudo

+0

'INSERT' /' SELECT'で複数の行を生成することができます。後者は 'JOIN'の一部にすることもできないこともできます。あなたはそれぞれの例ですか? – Drew

答えて

0

これはphp not 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

ありがとうAntony。すでに搭乗者IDを予約テーブルの外部キーとして持っている場合、乗客テーブルに予約IDを持たせることは必要かどうかですか? – Jockfaire

関連する問題