2016-10-27 2 views
0

Ich habe eine members Tabelle mit einer Spalte amount, die bereits einen ganzzahligen Wert in sich hat, mag ich auf diesen Wert hinzuzufügen und verwendet dessen Inhalt dann eine andere Tabelle accounts zu aktualisieren genannt, die den Betrag wird gutgeschrieben halten und den neuen Saldo (dh nach Zugabe)Wie Wert hinzuzufügen bereits vorhandene Wert in der Spalte Feld und dann den Aktualisierungswertes in einer anderen Tabelle einfügen

$this->query_array = array(':amt' => $amount, ':uid' => $userid, ':dat' => $date); 

    $this->query_string = "UPDATE members SET amount = amount + :amt; 
          INSERT INTO accounts VALUES (:uid, :amt, members.amount + :amt, :dat);"; 

das ist meine Frage oben, ich versuche, die members.amount Tabelle aus der update Abfrage und Verwendung zu erhalten es in der insert Abfrage gibt es einen besseren Weg, eine, die funktioniert als das, was ich versuchte.

Beispieldaten:

  Members Table  userid  amount 
          --------------------- 
           u123  4000 
           y123  5000 

      Accounts Table  userid  credit balance date 

Accounts table ist derzeit leer so, was ich tun möchte, ist 300 in memebrs Tabelle auf alle Werte hinzufügen, und fügen Sie dann in etwa wie folgt erklärt.

  Accounts Table  userid  credit balance date 
           ------------------------------------- 
           u123  300  4300  11-11-11 
           y123  300  5300  11-11-11 
+0

Bearbeiten Sie Ihre Frage und liefern Sie Beispieldaten und gewünschte Ergebnisse. –

Antwort

0

ich eine insert ... select ... Anweisung würde die gewünschten Ausgänge zu erreichen:

INSERT INTO accounts 
SELECT members.userid, :amt, members.amount, :dat FROM members 

Hinweise :

  1. Ich benutze die members.amount anstelle von members.amount + :amt, weil die :amt bereits einmal zu members.amount hinzugefügt wurde.

  2. Ihre Update-Anweisung aktualisiert alle Datensätze innerhalb der Tabelle members, aber die INSERT-Anweisung würde Datensätze nur für einen bestimmten Benutzer erstellen. Ich glaube, Sie sollten die Update-Anweisung auf den jeweiligen Benutzer beschränken oder die Einfügung nicht auf einen bestimmten Benutzer beschränken. Ich wählte den letzteren Ansatz.

  3. Wenn Sie den Saldo denormalisiert speichern möchten, würde ich lieber einen Trigger für die Konten Tabelle verwenden, um den Saldo in der Mitglieder Tabelle zu aktualisieren, als 2 Anweisungen zu verwenden.

+0

Ich muss auch die Mitglieder-Tabelle von 4000 bis 4300 zuerst vor 'INSERT' aktualisieren, so dass ich in keiner Weise auswähle. –

+0

Ja, Sie haben Ihre Update-Anweisung dafür. Ich dachte, du hättest ein Problem mit dem Einsatz, basierend auf der Frage. – Shadow

+0

Okay, ich habe gerade Ihre Lösung direkt unter mein Update eingefügt und es funktioniert. Tut mir leid, dass ich die Lösung falsch eingeschätzt habe –

0

Es ist ein einfacher Einsatz durch eine Auswahlabfrage, die Frage ist nur über das Datum

INSERT INTO Accounts (userid, credit, balance, date) 
    SELECT userid, 300, amount, NOW() 
    FROM Members; 
Verwandte Themen