簡體   English   中英

PHP MySQL:更新連接表?

[英]PHP MySQL: Update a Join table?

我對如何最好地更新連接表有點困惑。

Presentaion
id PK

Asset
id PK

PresentationAsset
presentationid
assetid

因此,在更新 Presentation 及其在 PresentationAsset 中的關聯資產時,我是否首先搜索所有關系,刪除這些關系,然后創建新關系?

處理這種情況的最佳方法是什么?

至少,將它們全部刪除並創建新的當然是最簡單的。 畢竟,這只是兩個查詢。

DELETE FROM PresentationAsset WHERE presentationid = 1
INSERT INTO PresentationAsset VALUES (1, 1), (1, 2), (1, 3)

假設這些確實是該表中僅有的兩列(例如,沒有時間戳或任何內容),我無法想象您需要將其復雜化的任何理由。

畢竟,擦除現有行並插入所有新行的替代方法是保留已經存在的行,但刪除不再應該存在的行,然后插入新行。 從本質上講,您仍然至少得到一個DELETE和一個INSERT ,因此在大多數現實世界的應用程序中應該沒有太大的性能差異。 第一種方法的性能甚至可能更好,因為它需要更少的每個操作的值檢查。

當然,如果您正在處理足夠大的場景,其中如此微小的性能差異很重要,您可能希望對所有選項進行實際測試並自己測量性能。

當然,如果這些不是表中僅有的兩列,則您需要正確保留要更新的行的其他列的值,因此刪除所有內容並插入新內容不是一種選擇反正。

您有 2 個選擇:

1)刪除所有資產並按照您所說的創建新資產(定義更易於編碼和調試。如果您在 PresentationAsset 中沒有 PK,您可能遇到的唯一問題是多次刪除可能會留下大量數據在 PresentationAsset PK 上。)

2)這樣做(在偽代碼中)

  • 從當前與演示文稿關聯的資產中獲取所有 ID(舊值)。 我將其稱為 array1
  • 對於新值中的每項資產:
    • 如果它已經存在,用它的新值更新它並從 array1 中刪除它的 id
    • 如果不是,請創建它
  • 刪除所有 PresentationId = currentPresentationId AND AssetId IN array1 的 PresentationAsset

希望它足夠清楚,並希望我正確理解你的問題;)我想我可以接受 1),但 2)可能更好。 您更新需要更新的值並刪除那些已移除的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM