2017-12-06 2 views
1

Ich habe eine MySQL-Tabelle, die täglich von einer API aktualisiert, aber jetzt möchte ich ein bestimmtes Feld verfolgen, das von der API aktualisiert wurde. Ich möchte die Zeile mit dem aktuellen Feld (Wert) ändern und das alte Feld (Wert) in einem anderen Feld behalten. Könnte jemand bitte mich in die richtige Richtung weisen und was wäre die beste Praxis dafür?Wie aktualisiere ich den neuen Wert im aktuellen Feld und übertrage den aktuellen Wert in das alte Feld?

Tabelle (original)

--------------------------------- 
|ID | Input Date | Expired Date | 
--------------------------------- 
| 2 | 2017-05-17 | 2017-12-19 | 
--------------------------------- 
| 3 | 2017-07-09 | 2018-05-19 | 
--------------------------------- 

Tabelle, wenn aktualisiert (aktuelle)

--------------------------------- 
|ID | Input Date | Expired Date | 
--------------------------------- 
| 2 | 2017-05-17 | 2018-05-28 | <----- ID 2: Expired Date updated 
--------------------------------- 
| 3 | 2017-07-09 | 2018-05-19 | 
--------------------------------- 

Tabelle aktualisiert und alte Feldwert hält

------------------------------------------------ 
|ID | Input Date | Expired Date | Old Exp Date | 
------------------------------------------------ 
| 2 | 2017-05-17 | 2018-05-28 | 2017-12-19 | 
------------------------------------------------  
| 3 | 2017-07-09 | 2018-05-19 |    | 
------------------------------------------------ 

Ich hoffe, dieser Sinn ein wenig, bitte helfen..Danke so viel :)

+0

Das Programm, das Sie verwenden, um die Felder zu aktualisieren, warum können Sie nicht einfach tun, wonach Sie fragen? – Forbs

+0

Möchten Sie eine reine SQL-Lösung oder eine PHP-Lösung? – Felix

+0

sowohl PHP als auch mySQL funktionieren @fe – Edward

Antwort

1

Ich fand heraus, 2 Möglichkeiten dies zu tun:

A. Mit 2 Anfragen an die Datenbank
- Aktualisiere die Alt Abl.datum mit dem Expired Datum Wert aus der Tabelle
- Aktualisiere die Expired Datum mit dem neuen Wert aus der API

B. eine einzelne Abfrage mit
- Sie können versuchen, auf einmal beide Felder zu setzen, aber Sie sollten es
testen - es ist wie SET Alt Abl.datum = Expired Datum, Expired Datum = API_VALUE

Einige Implementierungen haben nicht die gleiche UPDATE Bestellung:
sql-update-order-of-evaluation

Sie sollten es prüfen, um zu sehen, wie es funktioniert auf dein System. Wenn es funktioniert, sollten Sie entscheiden, ob Portabilitätsprobleme bestehen.

Mit freundlichen Grüßen,
Lin

2

Sie einen Trigger erstellen kann es

CREATE TRIGGER date_updated BEFORE UPDATE ON <your table name> 
     FOR EACH ROW SET <old exp date column> = OLD.<expired date column> 

In PostgreSQL, können Sie die RETURNING-Klausel

UPDATE <table name> SET <column> = <value> RETURNING <column> 
0

Sie können einfach die mysql versuchen können Abfrage ähnlich wie diese,

UPDATE your_table_name 
SET `Old Exp Date` = `Expired Date`, 
`Expired Date` = "$api_value"; 
Verwandte Themen