birden fazla tablo ile yinelenen kayıtları oluşturma php / mysql

3 Cevap php

Ben otel rezervasyonları yapmak için bir veritabanı inşa ediyorum. Başka bir sözde "Odalar" (her rezervasyon birçok oda, her odada sadece tek bir rezervasyonu ait) özel odalar hakkında ayrıntılı tutarken "rezervasyon" adı verilen bir tablo, rezervasyonun genel detayları tutar.

(Elbette, birincil anahtar hariç) kolayca yinelenen rezervasyonları kayıtlarını elde edebilmek istiyorum. Benim sorunum kendi rezervasyon ilişkili olurken ardından odaların tabloya eklenen bir dizi olarak odalar veriyi üreten olduğunu.

Ben kadar (tartışma amaçlı çıplak temel aşağı çıplak) aşağıdaki önemsiz kodu olarak geldim.

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

Şimdi asıl soru, nedir? Her şeyi denedim bir hata veya yenisini üretir ya, ve ben bu özel ihtiyacını gideren herhangi bir tartışma bulmak için görünmüyor olabilir. Yardımlarınız için teşekkürler.

3 Cevap

Peterc, sen ODA kayıt bilgilerini ekleyerek gösterir listede hiçbir kod yoktur. Kodunuzun / / oda almak bölümünde, veri çekerek ve bir dizi içine koyarak. Eğer gerçekten bir yinelenen kayıtları oluşturmak istiyorsanız, ben o zaman sadece içeri onları geri koymak için kayıtları dışarı çıkarmak zorunda değilsiniz, veritabanı içinde insert kullanmak istiyorum

İstediğiniz kod biraz böyle bir şey olacak. Bu listeledik / / odaları almak kodu yerinde olacaktır: (pseudo code) [not: $ id çoğaltılamaz rezervasyon için sql ovülden yeni seçilen id temsil]

INSERT INTO rooms(res_id, other, data) SELECT $id, other, data FROM rooms WHERE id = $_POST['id'];

Bu, doğru veritabanı içinde yeni reservation_id ekleyerek, oda verileri çoğaltmak için izin verecektir. , Kayıtları çekin ekler oluşturmak, ve sonra içeri geri koymak gerek yok INSERT INTO hakkında daha fazla bilgi bulabilirsiniz ... Burada SELECT ifadeleri: http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-select-into-table.html

// 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 olsun, ama db içine eklemek gerekir .. yani ekleme ile

mysqli_query($link, $sql);

verileri almadan önce

Sadece kayıtları çoğaltmak gerekirse, bunu bu şekilde yapabilirsiniz:

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
   )

Sonra oda için son eklenen id kullanarak bu gibi (mysql_insert_id ile alınan örneğin):

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
    )