php / mysql用多个表创建重复记录

时间:2010-03-06 16:01:01

标签: 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']);
}

最大的问题是,现在是什么?我尝试的所有内容都会生成错误或没有新条目,我似乎无法找到任何解决此特定需求的讨论。谢谢你的帮助。

3 个答案:

答案 0 :(得分: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你得到插入的id,但你应该把它插入db ..所以添加

mysqli_query($link, $sql);

在检索数据之前

答案 1 :(得分:1)

PeterC,没有列出显示您插入ROOM记录信息的代码。在代码的//检索房间部分,您将提取数据并将其放入数组中。如果你真的想要创建一个重复的记录,我会在数据库中使用insert,然后你不必将记录拉出来只是为了把它们放回来。

你想要的代码就是这样的。它将取代您列出的//检索房间代码:(伪代码)[注意:$ id表示从您的sql插入中为重复预订新选择的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

答案 2 :(得分: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
    )
相关问题