Nasıl satır tüm kimlikleri bir çoklu satır ekleme deyimi ile oluşturulan alabilirim

5 Cevap php

Ben php yeniyim. Bu aptal bir soru gibi görünüyor eğer öyleyse, lütfen beni affet.

I MySQL insert bildirimde Say insert into table (a,b) values (1,2),(3,4),(5,6). tablo 'tablo' 'id' denilen bir otomatik artış alanına sahiptir.

nasıl tüm kimlikleri yukarıda insert deyimi ile oluşturulan alabilirsiniz?

I mysqli kullanan bir örnek olsun eğer büyük olacak.

5 Cevap

Sen yapamazsın. Ben (guid veya kendi otomatik artış tablosunu kullanarak) kendi kimliklerini korumak ve tabloya eklediğinizde bunu kullanmanızı öneririm.

Ama) LAST_INSERT_ID (kullanarak eklenen son için otomatik artış değeri elde etmek mümkündür:

http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

AngeDeLaMort cevabı neredeyse hakkıdır. Elbette, sorunla başa çıkmak için en uygun şekilde bir defada bir satır eklemek ve (ölçeklenebilirlik açısından ek yarar vardır) insert_id yoklayacak veya başka bir yerde dizisini üretmektir.

Sadece çok yolu bu başarısız olacaktır olabilir var - Ben son insert_id belirlemek için çalışıyor ve bu en son insert_id after insert karşılaştırarak karşı şiddetle tavsiye ediyorum.

Ama ... alternatif bir yaklaşım olacaktır:

....
"INSERT INTO destn (id, data, other, trans_ref) 
 SELECT id, data, other, connection_id() FROM source";
....
"SELECT id FROM destn WHERE trans_ref=connection_id()";
....
"UPDATE destn SET trans_ref=NULL where trans_ref=connection_id()";

İkinci sorgu (bu 3 sorgular için aynı bağlantıyı kullanan varsayar unutmayın) oluşturulan kimliklerini dönecektir. (Yani yeniden kullanılır) çıkardığınızda bağlantı kimlikleri havuza geri gitmek için çünkü üçüncü sorgu gereklidir.

C.

Böyle bir kullanıcı kimliği gibi tür başka bir tanıtıcı varsa, bazı durumlarda, size Uniqueıd daha yüksekse veya mysql_insert_id eşit (etkilenen satır sayısına göre), sınır sorgunuzu filtre ve sadece kullanıcı tarafından bu görüntüleyebilirsiniz. Bu gerçekten sadece bir işlemin içinde çalışmak istiyorum.

$SQL = "INSERT INTO Table
       (UserID, Data)
       VALUES
       (1,'Foo'),
       (1,'Bar'),
       (1,'FooBar')";

$Result = mysql_query($SQL);
$LastID = mysql_insert_id();
$RowsAffected = mysql_affected_rows();

$IDSQL = "SELECT RecordID
          FROM Table
          WHERE UserID = 1
          AND RecordID >= '$LastID' 
          LIMIT '$RowsAffected'";
$IDResult = mysql_query($IDSQL);

as a follow up to AngeDeLaMort: You could seperate your inserts and do it something like this:

$data = array (
    array(1,2),
    array(3,4),
    array(5,6)
);
$ids = array();

foreach ($data as $item) {
   $sql = 'insert into table (a,b) values ('.$item[0].','.$item[1].')';
   mysql_query ($sql);
   $id[] = mysql_insert_id();
}

Şimdi tüm yeni id en $ id dizideki.

Belki bunu yapabilirsiniz

$insert = "insert into table (a,b) values (1,2),(3,4),(5,6)";
$mysqli->query($insert);
$rows_to_be_inserted=3;
$inserted_id = $mysqli->insert_id // gives me the id of the first row in my list
$last_row_id = ($inserted_id+$rows_to_be_inserted)-1;
$mysql->query("select * from table where id between  $inserted_id and $last_row_id");

adamlar sana ne söyledi?