Update Funktion MYSQL
ich trage in eine Tabelle folgende Datensätze aus einer Anwendung ein
DS1 - DS5 id,auftrag, position, nummer, bezeichnung, upe,...
Bsp:
1, 0815, 1, 007, muster, 125.00,..
2, 0815, 3, 008, müster, 126.00,..
3, 0815, 5, 009, mister, 127.00,..
4, 0815, 6, 100, mist, 98.00,...
5, 0815, 7, 101, müste, 55.30,...
soweit ist alles io, nur müsste die position aller datensätze des auftrages 0815 so geändert werden, dass eine fortlaufende nummerierung erfolgt:
1, 0815, 1, 007, muster, 125.00,..
2, 0815, 2, 008, müster, 126.00,..
3, 0815, 3, 009, mister, 127.00,..
4, 0815, 4, 100, mist, 98.00,...
5, 0815, 5, 101, müste, 55.30,...
Wer kann helfen?
Die id ist im richtigen Leben etwas umfangreicher '38ED25D64C7B6341C1257D870'
folgende abfrage bringt schon mal die anzahl der datensätze je auftrag
Select A.Auftrag, A.position, Count(*) As Anzahl
From tabelle A
Group By A.Auftrag, A.position
nur eine verwendung dieser abfrage als update
Update tabelle A
Inner Join
(Select A.Auftrag, A.position, Count(*) As Anzahl
From tabelle AS A Inner Join tabelle AS B
On A.position = B.position And A.auftrag>= B.auftrag
Group By A.auftrag, A.position) AS C
Set A.position= C.Anzahl
where A.auftrag = C.auftrag
trägt falsche werte ein......
Zwischenlösung generiert, diese funktioniert, bin mir sicher, dass das nicht das Optimum ist
' genriere Temporäre Tabelle....
CREATE TABLE l_tmp_'0815' (
`position` smallint(5) NOT NULL AUTO_INCREMENT,
`ID` varchar(35) COLLATE latin1_german1_ci NOT NULL DEFAULT '',
`auftrag` varchar(30) COLLATE latin1_german1_ci NOT NULL DEFAULT '',
PRIMARY KEY (`posID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci ROW_FORMAT=DYNAMIC;
insert into l_tmp_'0815' (ID, auftrag)
select ID, auftrag from tabelle_a
where ID = '0815';
update tabelle_a l, l_tmp_'0815' t
set l.position = t.position
where l.ID = t.ID;
DROP Table l_tmp_'0815';
Vielen Dank allen Beteiligten,