0

Automatische Rückverknüpfung

Ich habe folgenden Wunsch. Ich habe in einer N:N Tabelle die einzelnen Beziehungen von Familienmitgliedern verknüpft. Nun möchte ich bei Erstellen einer Beziehung automatisch einen neuen Datensatz zum "Gegenteil" erstellen. Name 1 ist Ehemann zu Name 2 -> neuer Datensatz -> Name 2 ist Ehefrau zu Name 1) ... Datenmodell  Tabelle "Person" und N:N Tabelle "Beziehung"  Freue mich über eine Lösung ... ich hab da nen Knoten im Kopf ... 

3 Antworten

null
    • Dan_S
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Moin ... habe doch noch selbst gebastelt und ein Grundgerüst erstellt, was funktioniert .... mit Ausnahme der switch Funktion .... hier wird die Variable nicht verändert ... komm nicht drauf, warum .... mit einer if-Anweisung klappt es, aber die dürfte später zu umständlich sein, wenn es mehr Fälle zu vergleichen gibt.... Hoffe, jemand findet meinen Fehler ...

     

    let a := personA;
    let b := personB;
    let aGender := personA.gender;
    let r := relationship;
    let test := cnt(select 'n:relationship' where personA = b and personB = a);
    if test = 0 then
    if dialog("new relationship", "do you want to add a new relationship", ["yes", "no"]) = "yes" then
    let new := (create 'n:relationship');
    new.(personA := b);
    new.(personB := a);
    new.(relationship := 0);
    let newR := 0;
    switch newR do
    case aGender = 1: 1
    case aGender = 2: 2
    end;
    new.(relationship := newR)
    end
    else
    alert("record already exist!!!")
    end

    • Dan_S
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Problem gelöst .... endlich verstanden, wie sitch funktioniert ;) 

     

    let a := personA;
    let b := personB;
    let aGender := personA.gender;
    let r := relationship;
    let test := cnt(select 'n:relationship' where personA = b and personB = a);
    if test = 0 then
    if dialog("new relationship", "do you want to add a new relationship", ["yes", "no"]) = "yes" then
    let new := (create 'n:relationship');
    new.(personA := b);
    new.(personB := a);
    let newR := switch aGender do
    case 1:
    1
    case 2:
    2
    end;
    new.(relationship := newR)
    end
    else
    alert("record already exist!!!")
    end

    • Dan_S
    • vor 4 Jahren
    • Gemeldet - anzeigen

    hier das getestete Update 

     

    let a := personA;
    let b := personB;
    let aGender := personA.gender;
    let bRelation := relationship;
    let newR := 0;
    let test := cnt(select 'n:relationship' where personA = b and personB = a);
    if test = 0 then
    if dialog("new relationship", "do you want to add the backward relationship?", ["yes", "no"]) = "yes" then
    let new := (create 'n:relationship');
    new.(personA := b);
    new.(personB := a);
    if aGender = 1 then
    newR := switch bRelation do
    case 1:
    1
    case 2:
    1
    case 3:
    5
    case 4:
    5
    case 5:
    3
    case 6:
    3
    end
    else
    newR := switch bRelation do
    case 1:
    2
    case 2:
    2
    case 3:
    6
    case 4:
    6
    case 5:
    4
    case 6:
    4
    end
    end;
    new.(relationship := newR)
    end
    else
    alert("record alreday exist!!!")
    end