Hallo - ich habe folgendes Problem:
Ich möchte gerne neue Markt-Daten in eine Tabelle schreiben, aber diese nicht einfach nur neu einfügen, sondern dies ist an Bedingungen geknüpft.
Hier mal zur Verdeutlichung einige Beispieldaten:
Also was passiert ist folgendes:
Ich habe die alten Marktdaten in der Tabelle old_marketdata. Nun kommen die neuen Daten (alle mit ein und derselben typeID, system_id und gleicher create_at und updated_at Zeit)
Nun soll er:
1. Die alten Daten (where alt.typeID=neu.typeID and alt.system_id=neu.systemID) , die in der neuen Tabelle nicht vorkommen werden auf Aktiv=0 gesetzt.
2. Die Daten, die in der neuen Tabelle vorkommen, aber in der alten nicht werden neu eingetragen.
3. Die Daten, die in beiden Tabellen vorkommen (alt.orderid=neu.orderid) werden neu gesetzt, allerdings behalten sie den alten "created_at"-Wert
Kann ich das mit reinem SQL machen? - Oder würdet ihr das über PHP lösen?
Die Daten in der new_marketdata kommen aus einer per PHP eingelesenen TXT-Datei - da ich aber nicht wusste, wie ich sonst Punkt 1 hätte lösen können dachte ich es sei vielleicht einfacher, die Daten erst einmal in eine Hilfstabelle zu schreiben. Nun komme ich aber nicht so recht weiter.
Vielen Dank schonmal!
Ich möchte gerne neue Markt-Daten in eine Tabelle schreiben, aber diese nicht einfach nur neu einfügen, sondern dies ist an Bedingungen geknüpft.
Hier mal zur Verdeutlichung einige Beispieldaten:
Code:
--
-- Tabellenstruktur für die `marktdaten`-Tabellen
--
CREATE TABLE `old_marketdata` (
`Aktiv` tinyint(1) NOT NULL DEFAULT '1',
`orderid` bigint(20) NOT NULL,
`typeID` bigint(20) NOT NULL,
`system_id` bigint(20) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`issued_at` datetime NOT NULL,
`available_volume` int(30) NOT NULL,
`price` decimal(10,2) NOT NULL,
PRIMARY KEY (`orderid`),
KEY `typeID` (`typeID`),
KEY `system_id` (`system_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
INSERT INTO `old_marketdata` (`Aktiv`, `orderid`, `typeID`, `system_id`, `created_at`, `updated_at`, `issued_at`, `available_volume`, `price`) VALUES
(1, 1759455689, 3888, 30003530, '2010-10-03 06:10:01', '2010-10-03 06:10:01', '2010-10-01 20:01:45', 1, '550499.00'),
(1, 1759734230, 3888, 30002187, '2010-10-03 06:10:01', '2010-10-03 06:10:01', '2010-10-03 18:30:32', 7, '669997.94'),
(1, 1751274344, 3888, 30002187, '2010-10-03 06:10:01', '2010-10-03 06:10:01', '2010-10-03 18:08:07', 7, '669997.95'),
(0, 1761688087, 3888, 30002187, '2010-10-03 06:10:01', '2010-10-03 06:10:01', '2010-10-03 17:51:53', 15, '669997.97'),
(1, 1761602515, 1236, 30002187, '2010-10-03 06:10:01', '2010-10-03 06:10:01', '2010-10-03 16:42:56', 4, '669997.98');
CREATE TABLE `new_marketdata` (
`Aktiv` tinyint(1) NOT NULL DEFAULT '1',
`orderid` bigint(20) NOT NULL,
`typeID` bigint(20) NOT NULL,
`system_id` bigint(20) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`issued_at` datetime NOT NULL,
`available_volume` int(30) NOT NULL,
`price` decimal(10,2) NOT NULL,
PRIMARY KEY (`orderid`),
KEY `typeID` (`typeID`),
KEY `system_id` (`system_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
INSERT INTO `new_marketdata` (`Aktiv`, `orderid`, `typeID`, `system_id`, `created_at`, `updated_at`, `issued_at`, `available_volume`, `price`) VALUES
(1, 1759967589, 3888, 30003530, '2010-10-05 08:15:43', '2010-10-05 08:15:43', '2010-10-03 21:02:58', 16, '580497.00'),
(1, 1759734230, 3888, 30002187, '2010-10-05 08:15:43', '2010-10-05 08:15:43', '2010-10-03 20:31:45', 6, '669997.74'),
(1, 1751274344, 3888, 30002187, '2010-10-05 08:15:43', '2010-10-05 08:15:43', '2010-10-03 18:08:07', 7, '669997.95'),
(1, 1761741978, 3888, 30002187, '2010-10-05 08:15:43', '2010-10-05 08:15:43', '2010-10-05 07:54:03', 45, '669997.94'),
(1, 1769977654, 3888, 30002187, '2010-10-05 08:15:43', '2010-10-05 08:15:43', '2010-10-04 16:32:18', 9, '669998.91');
--
-- Resultat (soll eigentlich wieder in old_maketdata stehen und dort eingetragen werden - hier jetzt mal per Hand in eine Tabelle geschrieben:
--
CREATE TABLE `result_marketdata` (
`Aktiv` tinyint(1) NOT NULL DEFAULT '1',
`orderid` bigint(20) NOT NULL,
`typeID` bigint(20) NOT NULL,
`system_id` bigint(20) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`issued_at` datetime NOT NULL,
`available_volume` int(30) NOT NULL,
`price` decimal(10,2) NOT NULL,
PRIMARY KEY (`orderid`),
KEY `typeID` (`typeID`),
KEY `system_id` (`system_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
INSERT INTO `result_marketdata` (`Aktiv`, `orderid`, `typeID`, `system_id`, `created_at`, `updated_at`, `issued_at`, `available_volume`, `price`) VALUES
(0, 1759455689, 3888, 30003530, '2010-10-03 06:10:01', '2010-10-03 06:10:01', '2010-10-01 20:01:45', 1, '550499.00'),
(1, 1759734230, 3888, 30002187, '2010-10-03 06:10:01', '2010-10-05 08:15:43', '2010-10-03 20:31:45', 7, '669997.74'),
(1, 1751274344, 3888, 30002187, '2010-10-03 06:10:01', '2010-10-05 08:15:43', '2010-10-03 18:08:07', 7, '669997.95'),
(0, 1761688087, 3888, 30002187, '2010-10-03 06:10:01', '2010-10-03 06:10:01', '2010-10-03 17:51:53', 15, '669997.97'),
(1, 1761602515, 1236, 30002187, '2010-10-03 06:10:01', '2010-10-03 06:10:01', '2010-10-03 16:42:56', 4, '669997.98'),
(1, 1759967589, 3888, 30003530, '2010-10-05 08:15:43', '2010-10-05 08:15:43', '2010-10-03 21:02:58', 16, '580497.00'),
(1, 1761741978, 3888, 30002187, '2010-10-05 08:15:43', '2010-10-05 08:15:43', '2010-10-05 07:54:03', 45, '669997.94'),
(1, 1769977654, 3888, 30002187, '2010-10-05 08:15:43', '2010-10-05 08:15:43', '2010-10-04 16:32:18', 9, '669998.91');
Ich habe die alten Marktdaten in der Tabelle old_marketdata. Nun kommen die neuen Daten (alle mit ein und derselben typeID, system_id und gleicher create_at und updated_at Zeit)
Nun soll er:
1. Die alten Daten (where alt.typeID=neu.typeID and alt.system_id=neu.systemID) , die in der neuen Tabelle nicht vorkommen werden auf Aktiv=0 gesetzt.
2. Die Daten, die in der neuen Tabelle vorkommen, aber in der alten nicht werden neu eingetragen.
3. Die Daten, die in beiden Tabellen vorkommen (alt.orderid=neu.orderid) werden neu gesetzt, allerdings behalten sie den alten "created_at"-Wert
Kann ich das mit reinem SQL machen? - Oder würdet ihr das über PHP lösen?
Die Daten in der new_marketdata kommen aus einer per PHP eingelesenen TXT-Datei - da ich aber nicht wusste, wie ich sonst Punkt 1 hätte lösen können dachte ich es sei vielleicht einfacher, die Daten erst einmal in eine Hilfstabelle zu schreiben. Nun komme ich aber nicht so recht weiter.
Vielen Dank schonmal!
Zuletzt bearbeitet: