2010-03-06 59 views
0

我正在建立一個數據庫,用於預訂酒店。一張名爲「預訂」的表格包含預訂的一般細節,而另一張名爲「房間」的房間則包含有關特定房間的詳細信息(每個預訂有許多房間,每個房間只屬於一個預訂)。php/mysql創建多個表的重複記錄

我希望能夠輕鬆生成重複的預留記錄(當然除了主鍵)。我的問題是將房間數據生成爲一個數組,然後在與其預留相關聯時將其插入房間表中。

我已經到了以下簡單的代碼(剝離到討論的基本要點)。

if (isset($_POST['action']) and $_POST['action'] == 'Duplicate') 
{ 
    include $_SERVER['DOCUMENT_ROOT'] . '/includes/connect.inc.php'; 
    $id = mysqli_real_escape_string($link, $_POST['id']); 

// retrieve reservation 
$sql = "SELECT type_of_reservation FROM reservations WHERE id='$id'"; 
$result = mysqli_query($link, $sql); 
$row = mysqli_fetch_array($result); 
$type_of_reservation = $row['type_of_reservation']; 
// create new reservation record 
$sql = "INSERT INTO reservations SET type_of_reservation ='$type_of_reservation'"; 
$id = mysqli_insert_id($link); 

// retrieve rooms 
$sql = "SELECT reservation_id, in_date FROM rooms WHERE reservation_id='$id'"; 
$result = mysqli_query($link, $sql); 
while ($row = mysqli_fetch_array($result)) 
{ 
    $rooms[] = array('reservation_id' => $row['reservation_id'], 'in_date' => $row['in_date']); 
} 

最大的問題是,現在是什麼?我試過的每件事都會產生一個錯誤或者沒有新的條目,我似乎無法找到任何解決這個特定需求的討論。謝謝你的幫助。

回答

1

PeterC前加

mysqli_query($link, $sql);

,沒有列出代碼顯示您插入ROOM記錄信息。在你的代碼的//檢索空間部分,你正在拉取數據並將其放入數組中。如果你真的想創建一個重複的記錄,我會使用插入數據庫內,那麼你不必拉出記錄,只是爲了讓他們回來。

你想要的代碼位是喜歡這個。這將是代替您列出了//獲取房間代碼:(僞代碼)[注:$ id表示從您的SQL INSERT新選擇的ID爲重複預訂]

INSERT INTO roomsres_idotherdata) SELECT $ id,otherdata FROM rooms WHERE id = $ _POST ['id'];

這將允許您複製房間數據,並在數據庫中添加新的reservation_id。無需拔出記錄,創建插入,然後把它們放回你可以閱讀更多關於INSERT INTO ...這裏SELECT語句:http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html

+0

謝謝! INSERT INTO ... SELECT語句顯然是我需要了解的東西!我會試試這個。 – PeterC 2010-03-06 17:17:51

1
// create new reservation record 
    $sql = "INSERT INTO reservations SET type_of_reservation ='$type_of_reservation'"; 
     //ADD HERE CODE BELOW 
    $id = mysqli_insert_id($link); 

mysql_insert_id你得到inseted ID,但你應該把它插入到數據庫..所以檢索數據

+0

謝謝,但這是一兩件事,我曾上面剝離出來的代碼爲討論目的 - 它在實際的代碼的錯誤檢查。 – PeterC 2010-03-06 16:23:42

+0

我一直在嘗試使用foreach(),但無法弄清楚正確的語法:例如foreach($房間爲$房間=> $ reservation_id)會引發錯誤... – PeterC 2010-03-06 16:26:32

1

如果你只需要重複的記錄,你可以做到這方法:

INSERT INTO 
    reservations 
    (
    SELECT 
     null, # assume first column is auto incrementing primary key, so leave null 
     `all`, 
     `other`, 
     `column`, 
     `names` 
    FROM 
     reservations 
    WHERE 
     reservation_id = $oldReservationId # id of reservation to duplicate 
    ) 

然後在房間用最後插入的ID(例如與mysql_insert_id檢索),像這樣:

INSERT INTO 
    rooms 
    (
     SELECT 
      null, # assume first column is auto incrementing primary key, so leave null 
      $newReservationId, # this is the new reservation id 
      `all`, 
      `other`, 
      `column`, 
      `names` 
     FROM 
      rooms 
     WHERE 
      reservation_id = $oldReservationId # id of reservation to duplicate 
    ) 
+0

非常感謝 - 我會試試這個。 – PeterC 2010-03-06 17:18:13