Ambil ID setelah penyisipan massal

Saya menggunakan MySQL 5.5 dengan PHP 5.4. Saya sedang melakukan penyisipan massal dan perlu mengambil semua ID yang baru dimasukkan. Ini kode saya:

$db->query("INSERT INTO commodity (analysis_id, commodity_description, a_units, 
a_average_yield, a_average_price) SELECT $analysis_id, commodity_description, 
a_units, a_average_yield, a_average_price FROM commodity WHERE analysis_id = 
$import_analysis_id");

Apakah ada cara untuk mengambil semua ID baru dari baris yang disisipkan? Menggunakan $db->insert_id hanya mengembalikan satu ID. Saya tidak suka harus menggunakan loop PHP dan menjalankan beberapa kueri, tetapi saya akan melakukannya jika perlu. Terima kasih!


person Jeff    schedule 18.07.2012    source sumber
comment
Tidak mungkin (tidak ada solusi yang diketahui, saya tahu). Bisakah Anda memposting contoh ID yang Anda perlukan? Mungkin kami dapat menemukan cara lain untuk mengarsipkan tujuan Anda...   -  person Ron    schedule 18.07.2012
comment
Apakah Anda memiliki data waktu yang diajukan di tabel Anda? jika ya maka Anda dapat menulis pertanyaan sederhana untuk mendapatkan semua id yang dimasukkan setelah cap waktu tertentu ..   -  person metalfight - user868766    schedule 18.07.2012
comment
Apa nama bidang ID yang Anda inginkan? Saya kira itu bukan analysis_id. Mungkinkah itu commodity_id atau mungkin hanya id?   -  person ghbarratt    schedule 18.07.2012


Jawaban (2)


Anda dapat menemukan ids yang bertambah secara otomatis dengan terlebih dahulu memilih id tertinggi di tabel Anda. ids lebih tinggi dari itu baru setelah dimasukkan.

select max(id) from commodity 
person juergen d    schedule 18.07.2012
comment
Dengan solusi ini, pertimbangkan untuk menggunakan LOCK TABLES untuk mencegah sesi lain menyisipkan ke tabel yang sama, sehingga merusak data Anda. - person Marcus Adams; 18.07.2012
comment
Menggunakan LOCK TABLES adalah ide yang sangat bagus. Tapi ini memperlambat proses saya karena hanya satu proses yang dapat melakukan ini dalam satu waktu. - person Ron; 18.07.2012
comment
Saya pikir Juergen benar. Untuk InnoDB, Anda bisa menggunakan transaksi (dengan Baca Berulang), yang memungkinkan penggunaan tabel secara bersamaan. - person Marcus Adams; 18.07.2012

Sepertinya aku sudah terlalu memikirkan hal ini. Karena saya memasukkan analysis_id (misalnya, nomor kasus, nomor pelanggan, dll.), saya memutuskan untuk menjalankan kueri setelah ini yang akan menarik semua ID untuk analysis_id yang dimasukkan. Ini menyelesaikan masalah saya.

person Jeff    schedule 18.07.2012
comment
Dingin. Apakah analysis_id diindeks? - person Marcus Adams; 18.07.2012