2012-04-08 6 views
0

Ich bin ein wenig verwirrt, wie man eine Join-Tabelle am besten aktualisiert.PHP MySQL: Aktualisieren einer Join-Tabelle?

Presentaion 
id PK 

Asset 
id PK 

PresentationAsset 
presentationid 
assetid 

Also, wenn eine Präsentation zu aktualisieren und die dazugehörenden Vermögenswerte innerhalb PresentationAsset, suche ich zunächst für alle Beziehungen, diejenigen löschen und dann neue schaffen?

Was ist der beste Ansatz für ein Szenario wie dieses?

Antwort

1

Es ist sicherlich einfachste, mindestens, um sie alle zu löschen und neue zu erstellen. Immerhin sind es nur zwei Abfragen.

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

diejenigen Unter der Annahme, sind in der Tat die einzigen beiden Spalten in dieser Tabelle (keine Zeitstempel oder irgendetwas, zum Beispiel), ich aus irgendeinem Grund nicht vorstellen, können Sie es mehr als das erschweren bräuchten.

Die Alternative zum Löschen Ihrer bestehenden Zeilen und Einfügen aller neuen Zeilen wäre, die bereits existierenden zu behalten, aber diejenigen zu löschen, die nicht mehr existieren sollten, und neue einzufügen. Im Wesentlichen haben Sie immer noch mindestens eine DELETE und eine INSERT, so dass es in den meisten realen Anwendungen nicht viel Leistungsunterschied geben sollte. Die Leistung kann bei der ersten Vorgehensweise sogar besser sein, da weniger Wertüberprüfung pro Operation erforderlich ist.

Wenn Sie mit einem ausreichend großen Szenario arbeiten, in dem ein so geringer Leistungsunterschied wichtig wäre, würden Sie wahrscheinlich wirklich alle Optionen testen und die Leistung selbst messen wollen.

Und natürlich, wenn diese nicht die einzigen zwei Spalten in Ihrer Tabelle sind, müssen Sie die Werte der anderen Spalten für die Zeilen, die Sie aktualisieren, ordnungsgemäß zu halten, so dass alle löschen und neue einfügen wäre sowieso keine Option.

+0

Ja, das ist ziemlich genau das, was ich dachte.Es wäre zu mühsam, nach vorhandenen Daten zu suchen, die sich nicht ändern und so weiter. Danke für die Antwort. – dcolumbus

0

Sie haben 2 Möglichkeiten:.

1) Löschen Sie alle Vermögenswerte und schaffen die neuen wie Sie gesagt haben (def einfacher Code und einfacher zu debuggen Wenn Sie keine PK in PresentationAsset haben, die nur Problem Sie haben können ist, dass mehrere Löschungen viele Daten über die PresentationAsset PK verlassen konnte.)

2) dies tun (in Pseudo-Code)

  • erhalten alle IDs aus dem Vermögen zur Zeit mit der Präsentation zugeordnet (alte Werte). Ich werde auf diese beziehen sich array1
  • Für jede Anlage in den neuen Werten:
    • wenn es schon da ist, aktualisieren Sie sie mit den neuen Werten und entfernen Sie die ID von array1
    • wenn es nicht schaffen es
  • löschen sie alle PresentationAsset deren PresentationId = currentPresentationId uND AssetID IN array1

hoffe, es ist klar genug, und ich hoffe, Ihr Problem richtig verstanden;) ich glaube, ich Witz leben können h 1), aber 2) ist wahrscheinlich besser. Sie aktualisieren die zu aktualisierenden Werte und löschen diejenigen, die entfernt wurden.