Analisis mendalam tentang masalah pengendalian pemadaman banyak-ke-banyak dalam PHP

PHPz
Lepaskan: 2023-04-11 14:56:01
asal
764 orang telah melayarinya

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.

  1. Memahami persatuan ramai-ke-banyak

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.

  1. Buat jadual perantaraan

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)
);

  1. Padamkan perkaitan

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.

  1. Merangkum fungsi universal

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);
}
Salin selepas log masuk

}

  1. Ringkasan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan