我正在建立一个用于预订酒店的数据库。一个名为“预订”的表格保留了预订的一般细节,而另一个名为“房间”的表格保存了特定房间的详细信息(每个预订有许多房间,每个房间只属于一个预订)。
我希望能够轻松生成重复的预订记录(当然,主键除外)。我的问题是将房间数据生成为一个数组,然后将其插入房间表,同时与其预订相关联。
我已经达到了以下琐碎的代码(为了讨论的目的而被剥离到最基本的要素)。
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']);
}
最大的问题是,现在是什么?我尝试的所有内容都会生成错误或没有新条目,我似乎无法找到任何解决此特定需求的讨论。谢谢你的帮助。
答案 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 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
答案 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
)