update einer m-n Tabelle ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • update einer m-n Tabelle ?

    Tach auch !

    ich habe folgendes Problem:
    in einer m-n Tabelle speichere ich (wie wäre es anders zu erwarten) m-n Beziehungen, konkret: ich habe eine Adressdatensatz mit einer bestimmten ID. Ein "Adressat" kann zu mehreren Produktgruppen zugeordnet werden, diese Zuordnung wird in der m-n Tabelle gespeichert:

    CREATE TABLE `adrdb_adr_pgrp` (
    `pgrp` smallint(5) unsigned NOT NULL default '0',
    `adrid` smallint(5) unsigned NOT NULL default '0',
    UNIQUE KEY `NewIndex` (`adrid`,`pgrp`)
    ) TYPE=MyISAM COMMENT='m-n Produktgruppe - Adresse';

    Wenn nun der Adressdatensatz geändert wird, und der Kunde plötzlich nicht mehr zu den Produktgruppen mit der (Produktgruppen-)ID 2, 4, 6und 10 gehört ,sondern zu 3, 7,9 und 10, dann muss ich ja 2, 4 und 6 löschen, 3, 7 und 9 einfügen und die 10 so lassen, bei allen Datensätzen in der Tabelle adrdb_adr_pgrp, bei denen die ID des Adressdatensatzes in der Spalte "adrid" auftaucht.

    Die Information welche Produktgruppen ausgewählt wurden steckt in einem Array, das die ProduktgruppenIDs enthält.

    gibt es dafür eine elegante lösung oder muss ich das "brute force" mit mehreren Schleifen erledigen ?

    Danke im voraus & Grüsse
    CB
    Hans Matthöfers Widerspruch zur Expertenerkenntnis: Künstliche Intelligenz ist besser als natürliche Dummheit.

  • #2
    selbstgespräch

    nach rücksprache mit dem ein oder anderen SQL guru ist wohl die einfachste methode beim "update" die "alten" m-n Beziehungen zu löschen und einfach alles neu in die DB zu schreiben ...

    that's it
    cb
    Hans Matthöfers Widerspruch zur Expertenerkenntnis: Künstliche Intelligenz ist besser als natürliche Dummheit.

    Kommentar


    • #3
      Du kannst auch die einzelnen Datensätze mit 'nem REPLACE INTO schreiben ... dir die pgrp-ID's in 'nen String speichern und dann alle pgrp-ID's dieses Adressaten löschen die nicht in der Liste sind:

      Beispiel:
      PHP-Code:
      $liste=""$replaces="";
      foreach ( 
      $pgrps AS $pgrp ) {
          
      $liste.=($liste==""?"":",").$pgrp;
          
      $replaces.=($replaces==""?"":",")."($adrid$pgrp)");
      }

      if ( 
      $replaces!="" mysql_query("REPLACE INTO adrdb_adr_pgrp (adrid, pgrp) VALUES $replaces");
      if ( 
      $liste!="" mysql_query("DELETE FROM adrdb_adr_pgrp WHERE adrid=$adrid AND pgrp NOT IN ($liste)"); 
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar

      Lädt...
      X