Dalam pembangunan PHP, perhubungan banyak-ke-banyak adalah situasi yang sangat biasa. Ia biasanya digunakan untuk perkaitan antara pangkalan data atau antara jadual data. Walau bagaimanapun, apabila menggunakan perkaitan banyak-ke-banyak, kita perlu mempertimbangkan cara menyelesaikan operasi pemadaman, jika tidak, ia akan menyebabkan beberapa masalah, seperti ketidakkonsistenan data. Seterusnya, kami akan memperkenalkan cara mengendalikan masalah memadamkan banyak-ke-banyak persatuan dalam PHP.
Sebelum kita mula menerangkan pemadaman persatuan banyak-ke-banyak, mari kita fahami dulu persatuan banyak-ke- -banyak persatuan. Perkaitan banyak-ke-banyak bermakna terdapat berbilang perkaitan antara satu jadual data dan jadual data yang lain. Contohnya, pesanan boleh mengandungi berbilang item dan item boleh disertakan dalam berbilang pesanan. Dalam kes ini, kita perlu mencipta jadual perantaraan untuk mengaitkan dua jadual data.
Sebelum memadamkan perkaitan banyak-ke-banyak, kita perlu mencipta jadual perantaraan untuk menyimpan perkaitan antara dua jadual data. Jadual perantaraan biasanya mengandungi dua lajur, satu lajur ialah ID jadual A yang berkaitan, dan lajur satu lagi ialah ID jadual B yang berkaitan. Contohnya, dalam perhubungan banyak-ke-banyak untuk item pesanan, kita boleh membuat jadual perantaraan bernama order_goods, yang mengandungi dua lajur: order_id dan goods_id.
BUAT JADUAL order_goods
(
id
int(11) NOT NULL AUTO_INNCREMENT,
order_id
int(11) NOT NULL,
goods_id
int(11) NOT NULL,
KUNCI UTAMA (id
)
);
Bagaimana kita melaksanakannya dalam kes ramai-ke- banyak persatuan Bagaimana dengan operasi memadam? Kami biasanya melakukan langkah berikut:
3.1 Padamkan rekod dalam jadual perantaraan
Sebelum memadamkan perkaitan banyak-ke-banyak, kami perlu memadamkan rekod yang berkaitan dalam jadual perantaraan. Contohnya, dalam perkaitan banyak-ke-banyak barang pesanan yang kami nyatakan di atas, kami perlu melaksanakan pernyataan SQL berikut untuk memadamkan rekod dalam jadual perkaitan order_goods:
PADAM DARI order_goods
DI MANA order_id
=1 DAN goods_id
IN (2,3,4)
3.2 Tentukan sama ada rekod jadual B yang berkaitan perlu dipadam
Selepas melaksanakan langkah sebelumnya, kita perlu menilai sama ada kita perlu memadam rekod jadual B Rekod yang berkaitan. Contohnya, dalam perhubungan banyak-ke-banyak produk pesanan, jika produk tidak disertakan dalam sebarang pesanan, maka kita perlu memadamkan produk daripada jadual produk. Kita boleh menentukan sama ada kita perlu memadamkan rekod jadual B yang berkaitan dengan menanyakan rekod dalam jadual perantaraan.
PILIH * DARI order_goods
DI MANA goods_id
=1
Jika hasil pertanyaan kosong, ini bermakna produk tidak termasuk dalam sebarang pesanan, dan kami boleh memadamkan produk daripada komoditi jadual produk.
3.3 Tentukan sama ada rekod jadual A yang berkaitan perlu dipadamkan
Selepas melakukan langkah di atas, kita juga perlu menentukan sama ada rekod jadual A yang berkaitan perlu dipadamkan. Contohnya, dalam perhubungan banyak-ke-banyak dengan item pesanan, jika pesanan tidak mempunyai sebarang item, kita perlu memadamkan pesanan daripada jadual pesanan. Kita boleh menentukan sama ada kita perlu memadamkan rekod jadual A yang berkaitan dengan menanyakan rekod dalam jadual perantaraan.
PILIH * DARI order_goods
DI MANA order_id
=1
Jika hasil pertanyaan kosong, ini bermakna pesanan itu tidak mempunyai sebarang produk, dan kami boleh memadamkan pesanan daripada meja pesanan.
Untuk memudahkan penggunaan berbilang, kami boleh merangkum kod untuk memadamkan perkaitan banyak-ke-banyak ke dalam fungsi universal. Contohnya, dalam perhubungan banyak-ke-banyak item pesanan, kita boleh merangkum kod berikut:
function deleteOrderGoods($orderId, $goodsIds) { // 删除中间表中的记录 $sql = "DELETE FROM `order_goods` WHERE `order_id`=".$orderId." AND `goods_id` IN (".implode(',', $goodsIds).")"; $pdo->exec($sql); // 判断是否需要删除关联表B的记录 $sql = "SELECT * FROM `order_goods` WHERE `goods_id`=".$goodsIds[0]; $stmt = $pdo->query($sql); $result = $stmt->fetch(PDO::FETCH_ASSOC); if (!$result) { // 删除goods表中的记录 $sql = "DELETE FROM `goods` WHERE `id`=".$goodsIds[0]; $pdo->exec($sql); } // 判断是否需要删除关联表A的记录 $sql = "SELECT * FROM `order_goods` WHERE `order_id`=".$orderId; $stmt = $pdo->query($sql); $result = $stmt->fetch(PDO::FETCH_ASSOC); if (!$result) { // 删除order表中的记录 $sql = "DELETE FROM `order` WHERE `id`=".$orderId; $pdo->exec($sql); }
}
Pemadaman banyak-ke-banyak Persatuan ialah masalah biasa dalam pembangunan PHP Kita perlu terlebih dahulu memahami konsep perkaitan banyak-ke-banyak dan mencipta jadual perantaraan untuk menyimpan perkaitan antara kedua-dua jadual data. Apabila melakukan operasi pemadaman, kita perlu memadam rekod dalam jadual perantaraan dahulu, dan kemudian menentukan sama ada kita perlu memadamkan rekod jadual B yang berkaitan dan rekod jadual A yang berkaitan. Merangkumkan kod ke dalam fungsi umum boleh meningkatkan kecekapan pembangunan.
Atas ialah kandungan terperinci Analisis mendalam tentang masalah pengendalian pemadaman banyak-ke-banyak dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!