Eine ausführliche Analyse des Problems der Handhabung des Löschens von Viele-zu-Viele-Assoziationen in PHP

PHPz
Freigeben: 2023-04-11 14:56:01
Original
743 Leute haben es durchsucht

In der PHP-Entwicklung sind viele-zu-viele-Beziehungen eine sehr häufige Situation. Es wird normalerweise für Verknüpfungen zwischen Datenbanken oder zwischen Datentabellen verwendet. Bei Verwendung von Viele-zu-Viele-Zuordnungen müssen wir jedoch überlegen, wie der Löschvorgang abgeschlossen werden soll, da es sonst zu Problemen wie Dateninkonsistenzen kommt. Als nächstes stellen wir vor, wie man mit dem Problem des Löschens von Viele-zu-Viele-Zuordnungen in PHP umgeht.

  1. Viel-zu-viele-Beziehungen verstehen

Bevor wir beginnen, das Löschen von Viele-zu-viele-Beziehungen zu erklären, wollen wir zunächst die Viele-zu-viele-Beziehungen verstehen. Viele-zu-viele-Assoziationen bedeuten, dass zwischen einer Datentabelle und einer anderen Datentabelle mehrere Assoziationen bestehen. Beispielsweise kann eine Bestellung mehrere Artikel enthalten und ein Artikel kann in mehreren Bestellungen enthalten sein. In diesem Fall müssen wir eine Zwischentabelle erstellen, um die beiden Datentabellen in Beziehung zu setzen.

  1. Erstellen Sie eine Zwischentabelle

Bevor wir eine Viele-zu-Viele-Zuordnung löschen, müssen wir eine Zwischentabelle erstellen, um die Zuordnung zwischen den beiden Datentabellen zu speichern. Die Zwischentabelle enthält normalerweise zwei Spalten, eine Spalte ist die ID der zugehörigen Tabelle A und die andere Spalte ist die ID der zugehörigen Tabelle B. Beispielsweise können wir in einer Viele-zu-Viele-Beziehung für Bestellartikel eine Zwischentabelle mit dem Namen „order_goods“ erstellen, die zwei Spalten enthält: „order_id“ und „goods_id“.

CREATE TABLE order_goods (
id int(11) NOT NULL AUTO_INCREMENT,
order_id int(11) NOT NULL,
goods_id int(11) NOT NULL,
PRIMARY KEY (id)
);order_goods (
 id int(11) NOT NULL AUTO_INCREMENT,
 order_id int(11) NOT NULL,
 goods_id int(11) NOT NULL,
 PRIMARY KEY (id)
);

  1. 删除关联关系

在多对多关联的情况下,我们如何执行删除操作呢?我们通常会执行以下步骤:

3.1 删除中间表中的记录

在进行多对多关联删除之前,我们需要先删除中间表中关联的记录。例如,在我们上面提到的订单商品的多对多关联中,我们需要执行以下SQL语句来删除关联表order_goods中的记录:

DELETE FROM order_goods WHERE order_id=1 AND goods_id IN (2,3,4)

3.2 判断是否需要删除关联表B的记录

在执行完上一步之后,我们需要判断是否需要删除关联表B的记录。例如,在订单商品的多对多关联中,如果一个商品没有被任何订单所包含,那么我们就需要将该商品从商品表中删除。我们可以通过在中间表查询记录的方式来判断是否需要删除关联表B的记录。

SELECT * FROM order_goods WHERE goods_id=1

如果该查询结果为空,则说明该商品没有被任何订单包含,我们就可以从商品表中删除该商品。

3.3 判断是否需要删除关联表A的记录

在执行完上述步骤之后,我们还需要判断是否需要删除关联表A的记录。例如,在订单商品的多对多关联中,如果一个订单没有任何商品,则我们就需要将该订单从订单表中删除。我们可以通过在中间表查询记录的方式来判断是否需要删除关联表A的记录。

SELECT * FROM order_goods WHERE order_id

    Assoziation löschen

      Wie führen wir im Fall einer Viele-zu-Viele-Assoziation den Löschvorgang durch? Normalerweise führen wir die folgenden Schritte aus:
    1. 3.1 Datensätze in der Zwischentabelle löschen

    Bevor wir eine Viele-zu-Viele-Zuordnung löschen, müssen wir die zugehörigen Datensätze in der Zwischentabelle löschen. Beispielsweise müssen wir in der oben erwähnten Viele-zu-Viele-Zuordnung von Bestellwaren die folgende SQL-Anweisung ausführen, um Datensätze in der Zuordnungstabelle order_goods zu löschen:

    DELETE FROM order_goods WHERE order_id=1 AND <code>goods_id IN (2,3,4)

      3.2 Bestimmen Sie, ob die Datensätze der Zuordnungstabelle B gelöscht werden müssen
    1. Nach der Ausführung des vorherigen Schritts benötigen wir um festzustellen, ob die Assoziationsdatensätze aus Tabelle B gelöscht werden müssen. Wenn beispielsweise in der Viele-zu-Viele-Beziehung von Bestellprodukten ein Produkt in keiner Bestellung enthalten ist, müssen wir das Produkt aus der Produkttabelle löschen. Wir können feststellen, ob die Datensätze der zugehörigen Tabelle B gelöscht werden müssen, indem wir Datensätze in der Zwischentabelle abfragen.

    SELECT * FROM order_goods WHERE goods_id=1

    🎜Wenn das Abfrageergebnis leer ist, bedeutet dies, dass das Produkt in keiner Bestellung enthalten ist und wir es auswählen können aus der Produkttabelle Dieses Element löschen. 🎜🎜3.3 Bestimmen Sie, ob die Datensätze der zugehörigen Tabelle A gelöscht werden müssen.🎜🎜Nachdem wir die obigen Schritte ausgeführt haben, müssen wir auch feststellen, ob die Datensätze der zugehörigen Tabelle A gelöscht werden müssen. Wenn beispielsweise in einer Viele-zu-Viele-Beziehung mit Bestellartikeln eine Bestellung keine Artikel enthält, müssen wir die Bestellung aus der Bestelltabelle löschen. Wir können feststellen, ob wir die Datensätze der zugehörigen Tabelle A löschen müssen, indem wir Datensätze in der Zwischentabelle abfragen. 🎜🎜SELECT * FROM order_goods WHERE order_id=1🎜🎜Wenn das Abfrageergebnis leer ist, bedeutet dies, dass die Bestellung keine Waren enthält und wir die Bestellung löschen können aus der Bestelltabelle Order. 🎜🎜🎜Universelle Funktionen kapseln🎜🎜🎜Um Mehrfachverwendungen zu ermöglichen, können wir den Code zum Löschen von Many-to-Many-Assoziationen in einer universellen Funktion kapseln. In der Viele-zu-Viele-Assoziation von Bestellgütern können wir beispielsweise den folgenden Code kapseln: 🎜
    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);
    }
    Nach dem Login kopieren
    🎜}🎜🎜🎜Zusammenfassung🎜🎜🎜Das Löschen von Viele-zu-Viele-Assoziationen ist ein häufiges Problem in der PHP-Entwicklung Zuerst müssen Sie das Konzept der Assoziation verstehen und eine Zwischentabelle erstellen, um die Assoziation zwischen zwei Datentabellen zu speichern. Wenn wir einen Löschvorgang durchführen, müssen wir zuerst die Datensätze in der Zwischentabelle löschen und dann bestimmen, ob wir die Datensätze der zugehörigen Tabelle B und der zugehörigen Tabelle A löschen müssen. Durch die Kapselung von Code in allgemeine Funktionen kann die Entwicklungseffizienz verbessert werden. 🎜

Das obige ist der detaillierte Inhalt vonEine ausführliche Analyse des Problems der Handhabung des Löschens von Viele-zu-Viele-Assoziationen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!