【问题标题】:php/mysql creating duplicate records with multiple tablesphp / mysql创建具有多个表的重复记录
【发布时间】:2010-03-07 00:33:22
【问题描述】:

我正在建立一个用于预订酒店的数据库。一个名为“reservations”的表包含预订的一般详细信息,而另一个名为“rooms”的表包含有关特定房间的详细信息(每个预订有很多房间,每个房间只属于一个预订)。

我希望能够轻松生成重复的预订记录(当然,主键除外)。我的问题是将房间数据生成为一个数组,然后将其插入到房间表中,同时与其预订相关联。

我已经达到了以下琐碎的代码(为了讨论目的,只剩下最基本的部分)。

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

最大的问题是,现在怎么办?我尝试过的一切要么产生错误,要么没有新条目,而且我似乎找不到任何解决这个特定需求的讨论。感谢您的帮助。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    PeterC,没有列出显示您插入 ROOM 记录信息的代码。在代码的 //retrieve room 部分,您正在提取数据并将其放入数组中。如果你真的想创建一个重复的记录,我会在数据库中使用插入,那么你不必把记录拉出来再放回去。

    您想要的代码将是这样的。它将代替您列出的 //retrieve rooms 代码:(伪代码)[注意:$id 表示从您的 sql 插入中新选择的重复预订的 id]

    插入rooms(res_id, other, data) SELECT $id, other, data 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

    【讨论】:

    • 非常感谢! INSERT INTO ... SELECT 语句显然是我需要学习的东西!我会试试看。
    【解决方案2】:
    // 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);

    在检索数据之前

    【讨论】:

    • 谢谢,但这是我出于讨论目的从上面的代码中删除的一件事 - 它在实际代码的错误检查中。
    • 我一直在尝试使用 foreach() 但无法找出正确的语法:例如foreach($rooms as $room => $reservation_id) 抛出错误...
    【解决方案3】:

    如果你只是需要复制记录,你可以这样做:

    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
        )
    

    【讨论】:

    • 非常感谢 - 我会试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2023-03-27
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多