Werte mehrerer Datensaetze in Abhaengigkeit zueinander aendern
Peter Nack
- datenbank
0 Don P0 Markus**0 Peter Nack0 Markus**
0 Vinzenz Mai
Guten Tag Forum,
ich habe folgende Tabelle Foo:
id | name | longitude | latitude
-----------------------------------
1 | Test0 | 133.120035 | 9.6522630
2 | Test1 | 83.2300000 | 27.430000
3 | Test2 | 83.2300000 | 27.430000
4 | Test3 | 83.2300000 | 27.430000
5 | Test4 | 83.2300000 | 27.430000
6 | Test5 | 113.122235 | 21.651163
7 | Test6 | 133.120035 | 9.6522600
7 | Test7 | 133.120035 | 9.6522600
Ich wuerde nun gerne alle Datensaetze, welche die gleichen Longitude- und Latitude-Angaben besitzen, um einen gewissen Wert erhoehen - jedoch in Abhaengigkeit zu dem jeweils vorherigen (bereits erhoehten) Wert.
Sprich, der erste Datensatz wird um 0.002 erhoeht. Der naechste um 0.004, der darauffolgende um 0.006 usw. usf.
Das Ergebnis sollte also sein:
id | name | longitude | latitude
-----------------------------------
1 | Test0 | 133.120035 | 9.6522630
2 | Test1 | 83.2300000 | 27.430000
3 | Test2 | 83.2320000 | 27.432000 - um 0.002 erhoeht
4 | Test3 | 83.2340000 | 27.434000 - um 0.004 erhoeht
5 | Test4 | 83.2360000 | 27.436000 - um 0.006 erhoeht
6 | Test5 | 113.122235 | 21.651163
7 | Test6 | 133.120035 | 9.6522600
7 | Test7 | 133.122035 | 9.6542600 - um 0.002 erhoeht
Ich habe ehrlich gesagt nun keinen blassen Schimmer wo ich hier anfangen muss zu suchen.
Von daher wuerde ich mich ueber Tipps und Stichwoerter, die mich an dieser Stelle weiterbringen, freuen.
Besten Dank von meiner Seite!
Peter Nack
Hallo,
Ich wuerde nun gerne alle Datensaetze, welche die gleichen Longitude- und Latitude-Angaben besitzen, um einen gewissen Wert erhoehen - jedoch in Abhaengigkeit zu dem jeweils vorherigen (bereits erhoehten) Wert.
Sprich, der erste Datensatz wird um 0.002 erhoeht. Der naechste um 0.004, der darauffolgende um 0.006 usw. usf.
Das Ergebnis sollte also sein:
id | name | longitude | latitude
1 | Test0 | 133.120035 | 9.6522630 - nicht erhöht?
2 | Test1 | 83.2300000 | 27.430000 - auch nicht?
3 | Test2 | 83.2320000 | 27.432000 - um 0.002 erhoeht
4 | Test3 | 83.2340000 | 27.434000 - um 0.004 erhoeht
5 | Test4 | 83.2360000 | 27.436000 - um 0.006 erhoeht
6 | Test5 | 113.122235 | 21.651163 - wieder nicht?
7 | Test6 | 133.120035 | 9.6522600 - und wieder nicht?
7 | Test7 | 133.122035 | 9.6542600 - um 0.002 erhoeht - wieso nicht um 0.008?
Stichworte:
Gruß, Don P
Hallo Don,
Danke fuer deine Antwort!
id | name | longitude | latitude
1 | Test0 | 133.120035 | 9.6522630 - nicht erhöht?
2 | Test1 | 83.2300000 | 27.430000 - auch nicht?3 | Test2 | 83.2320000 | 27.432000 - um 0.002 erhoeht
4 | Test3 | 83.2340000 | 27.434000 - um 0.004 erhoeht
5 | Test4 | 83.2360000 | 27.436000 - um 0.006 erhoeht
6 | Test5 | 113.122235 | 21.651163 - wieder nicht?
7 | Test6 | 133.120035 | 9.6522600 - und wieder nicht?
8 | Test7 | 133.122035 | 9.6542600 - um 0.002 erhoeht - wieso nicht um 0.008?
ID 7 wurde nicht erhoeht, da es sich bei diesem Datensatz um das erste Vorkommen handelt. ID 2 -5 haben ja andere Werte fuer Latitude und Longitude.
ID 8 nur um 0.002, da bisher nur ein Datensatz mit identischen LL-Werten existiert. Die Datensaetze der IDs 2-5 werden an dieser Stelle nicht beachtet(eben wegen unterschiedlicher LL-Werte)
Stichworte:
- Serverseitiges Programm
– SQL UPDATE Statement
– Schleife für die einzelnen SQL-Statements, wobei jeweils eine Variable gesetzt wird mit dem Wert, um den als nächstes erhöht werden soll.
Na gut, mir ging es eher um SQL-Funktionen, mit denen ich das machen kann. Wie ich das mit serverseitigen Scripten machen kann ist mir ersichtlich.
Besten Dank
Peter
Ups vergessen: Mysql Server version: 5.0.67-community
Guten Tag Forum,
Hallo!
Ich wuerde nun gerne alle Datensaetze, welche die gleichen Longitude- und Latitude-Angaben besitzen, um einen gewissen Wert erhoehen - jedoch in Abhaengigkeit zu dem jeweils vorherigen (bereits erhoehten) Wert.
Sprich, der erste Datensatz wird um 0.002 erhoeht. Der naechste um 0.004, der darauffolgende um 0.006 usw. usf.
Das Vorhaben ist nicht trivial, allerdings mit Datenbankmitteln lösbar. Ich würde dazu wohl eine Stored Procedure bzw. Function in der entsprechenden Datenbank einbinden, oder es Softwareseitig mittels dynamisch generiertem SQL-Statement lösen.
Man kann etwa in SLQ eine variable deklarieren und hochzählen.
SET @zaehler = 0;
SELECT col1, col2, @zaehler:=@zaehler+1 AS zaehler FROM testtab WHERE x = y;
Gruß, Markus**
Hallo Markus,
Das Vorhaben ist nicht trivial, allerdings mit Datenbankmitteln lösbar.
Ja, hier kann man in einige Fallen schnappen.
SET @zaehler = 0;
SELECT col1, col2, @zaehler:=@zaehler+1 AS zaehler FROM testtab WHERE x = y;
Ah interessant. Da werde ich mich mal mehr mit befassen.
Eine Sache ist auch noch, dass es ja pro identische LL-Werte (Latitude,Longitude) einen Zaehler geben muss.. was die Sache noch ein wenig erschwert.
Aber vielleicht war Dons Hinweis, dass besser mit einer Sprache != SQL zu machen, doch gar nicht so schlecht. Denn hier habe mehrere Moeglichkeiten der Implementierung und Validierung, so wie eine bessere Moeglichkeit der Protokollierung nebst Transactions fuer Rollbacks.
Denn bei ueber >7000 Datensaetzen ist es doch recht schwierig den Ueberblick zu behalten, ob alle Werte nun korrekt korrigiert wurden oder nicht.
Danke & MfG
Peter Nack
Hallo Markus,
Hallo Peter,
ich habe mich mal intensiv mit dem Rechnen mit Geokoordinaten befasst incl. sphärischer berechnungen sowie recht komplizierter entfernungsberechnungen. Beispielsweise das (schnelle) Auffinden von Anhäufungen im Koordinatenbestand.
Falls das für Dich interessant sein könnte, kann ich Dir da den ein oder anderen Tip geben
Danke & MfG
Peter Nack
Gruß, Markus**
Hallo Markus,
das klingt sehr interessant. Auch wenn ich mich fuer's erste auf die einfache Angabe von Standpunkten beschraenke.
Zukuenftig werden sicherlich noch Funktionen hinzukommen wie "Was ist 50 km im Umkreis" etc. Dann werde ich gerne auf dich zurueckkommen ;-)
Besten Dank
Peter
Hallo,
ich habe folgende Tabelle Foo:
id | name | longitude | latitude
1 | Test0 | 133.120035 | 9.6522630
2 | Test1 | 83.2300000 | 27.430000
3 | Test2 | 83.2300000 | 27.430000
4 | Test3 | 83.2300000 | 27.430000
5 | Test4 | 83.2300000 | 27.430000
6 | Test5 | 113.122235 | 21.651163
7 | Test6 | 133.120035 | 9.6522600
7 | Test7 | 133.120035 | 9.6522600Ich wuerde nun gerne alle Datensaetze, welche die gleichen Longitude- und Latitude-Angaben besitzen, um einen gewissen Wert erhoehen - jedoch in Abhaengigkeit zu dem jeweils vorherigen (bereits erhoehten) Wert.
ich gehe davon aus, dass Deine Datenverfälschung eine einmalige Aktion ist.
Ich löste diese Aufgabe mit der Programmiersprache meiner Wahl und dem Schreiben der Daten in eine neue Tabelle, die über einen entsprechenden eindeutigen Index auf der Spaltenkombination longitude, latitude verfügt. Der Rest der Aufgabe entspricht einem üblichen Gruppenwechsel :-)
Für eine einmalige Aufgabe hielte ich es für übertrieben aufwendig, das unbedingt mit SQL-Mitteln lösen zu wollen. Wenn die Aufgabe jedoch einmal komplett erledigt wurde, ist es sinnvoll, mit SQL-Mitteln zu verhindern, dass die Aufgabe nochmals erforderlich wird. Selbstverständlich müssen die Anwendungen, die schreibend auf diese Tabelle zugreifen (INSERT, UPDATE) mit den erwarteten Fehlermeldungen des DBMS umgehen können.
Was passiert, wenn die nach Deiner Vorschrift verfälschten Daten bereits vorhandenen richtigen Daten entsprechen?
Welche Vorschrift hast Du dafür, wie die Reihenfolge innerhalb einer Gruppe gleicher longitude und latitude definiert ist?
Freundliche Grüße
Vinzenz