Anzeige - [Hier werben]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
Diskussion

SQL/PHP: Zahl in Datenbank - Komma durch Punkt

kekskruemel
---
Geschrieben am: Fr 13.05.2011, 15:30
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 472
Mitglied seit: 8.11.2005


Hallo,

ich habe in einer Datenbank Zahlen derzeit mit Komma als Trennung drinstehen, also z.B. als Wert 51,8342
Nun sollen diese Werte bei insgesamt 19.000 Eintragungen ausgetauscht werden durch einen Punkt.

Wie kann ich das automatisieren? Gibt es eine gute SQL ANweisung dazu?

Ich habe es auch schon mit php probiert, aber da scheint ein Fehler im Code zu sein:
CODE


<?php
include ('define.php'); // DB Zugang
for($i=1; $i<19000; $i++)
{
 $sql_plz = mysql_query("SELECT petrol_station_masters.id, petrol_station_masters.longitude AS  longitude, petrol_station_masters.latitude AS latitude FROM petrol_station_masters WHERE petrol_station_masters.id = '".$i."' ") or die(mysql_error());
 echo mysql_num_rows($sql_plz);
 while( $ds3 = mysql_fetch_object($sql_plz) )
 {
 $latitude =$ds3->latitude;
 $longitude = $ds3->longitude;
 $latitude = str_replace(',', '.', $latitude);
 $longitude = str_replace(',', '.', $longitude);
 
 $update = mysql_query("UPDATE petrol_station_masters SET petrol_station_masters.longitude = '".$longitude."' AND petrol_station_masters.latitude = '".$latitude."' WHERE petrol_station_masters.id = "'.$ds3->petrol_station_masters.id.'" ") or die(mysql_error());
 }
}

?>




--------------------
Top
PMEmail PosterUsers Website
Top
 
 
Jürgen Auer
Server-Daten - Online-CRM-Lösungen
#2 Geschrieben am: Fr 13.05.2011, 16:03 (+00:32)
Report PostQuote Post

AyomRank 9
Group Icon 2 Gruppe: Ehrenmitglied, Ex-Moderator

Gruppe: Ehrenmitglied, Ex-Moderator
Beiträge: 3657
Mitglied seit: 4.02.2006


So etwas würde ich nie so machen.

Abgesehen davon: Existiert das Problem überhaupt?

Was ist das in der Datenbank für ein Datentyp?

Wenn das ein numerischer ist, dann ist das bloß ein 'Scheinergebnis', das mit der Transformation auf die 'deutsche Darstellung' zusammenhängt.

Wenn tatsächlich Zahlen als String mit Komma definiert sind, dann:

Eine zweite Textspalte erstellen, da rein per Update die Kommas durch Punkte ersetzen.

Eine nummerische Spalte erstellen, da die zweite Textspalte reinkonvertieren.

Originalspalte umbenennen, letzte Spalte als Original benennen.

Das analog mit der zweiten Spalte.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

Server-Daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
kekskruemel
---
#3 Geschrieben am: Fr 13.05.2011, 16:43 (+00:40)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 472
Mitglied seit: 8.11.2005


Die derzeitigen Spalten sind varchar.

Ich habe keine Ahnung wie du das genau meinst und wie ich das am Besten umsetze.


--------------------
Top
PMEmail PosterUsers Website
Top
 

#4 Geschrieben am: Fr 13.05.2011, 17:09 (+00:26)
Report PostQuote Post

AyomRank 9
Group Icon 2 Gruppe: Moderator, Experte, VIP-Mitglied


Gruppe: Moderator, Experte, VIP-Mitglied
Beiträge: 2771
Mitglied seit: 27.12.2004


Die SQL-Abfragen sollten besser erst getestet werden, da ich es nicht gemacht habe.


SQL
UPDATE petrol_station_masters SET petrol_station_masters.longitude = REPLACE(petrol_station_masters.longitude, ',', '.') AND petrol_station_masters.latitude = REPLACE(petrol_station_masters.latitude, ',', '.');


Sobald Du nur noch Zahlen mit Punkt drin stehen hast, kannst Du wohl auch das Feld in ein Decimal, Float oder Double ändern, wäre zumindestens sehr sinnig Daten als das zu Speicher, was sie auch sind (und ich denke das meint teilweise auch Jürgen), ggf. musst Du aber diese Daten erst in eine neue Spalte kopieren, danach die alte Löschen und im Anschluss die neue umbenennen. Das vorherige Testen an einen Kopie der DB sollte natürlich selbstverständlich sein. wink.gif

SQL
UPDATE petrol_station_masters SET petrol_station_masters.longitude_new = REPLACE(petrol_station_masters.longitude, ',', '.') AND petrol_station_masters.latitude_new = REPLACE(petrol_station_masters.latitude, ',', '.');
Top
PMEmail PosterUsers Website
Top
 
Jürgen Auer
Server-Daten - Online-CRM-Lösungen
#5 Geschrieben am: Fr 13.05.2011, 17:57 (+00:47)
Report PostQuote Post

AyomRank 9
Group Icon 2 Gruppe: Ehrenmitglied, Ex-Moderator

Gruppe: Ehrenmitglied, Ex-Moderator
Beiträge: 3657
Mitglied seit: 4.02.2006


QUOTE (kekskruemel @ Fr 13.05.2011, 17:43)
Die derzeitigen Spalten sind varchar.

Das sind Zahlen, also sollten die auch als Zahlen abgespeichert werden.

Ich nutze für Geodaten üblicherweise

Decimal(18,14)

also Dezimalzahlen mit 4 Vorkomma und 14 Nachkommastellen.

Ansonsten muß man bei Berechnungen ständig erst die Textdarstellung in nummerische Daten umwandeln.


Aber so eine Typumwandlung würde ich nie direkt auf der Spalte machen. Sondern immer über Hilfsspalten gehen, welche die Zwischenwerte aufnehmen:

CODE

Update Tabelle Set Zwischenspalte = Replace(longitude, ',', '.')
Update Tabelle Set longitude_neu = Cast(Zwischenspalte as Decimal(18,14))


so als Pseudocode (ich weiß nicht genau, ob die Update-Anweisung bei mySql so ist).

Und dann die Spalten umbenennen:

longitude -> longitude_old
longitude_neu -> longitude


Solange man das über zusätzliche Spalten macht, kann man das auch immer auf der 'Originaltabelle' machen, man kann ja die Zusatzspalten wieder rauslöschen.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

Server-Daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung.
Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert.
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Marketing durch Facebook Fanpages? Artjom 1485 12 Do 20.12.2012, 13:46
Mehrdimensionale Datenbank Piero50 482 3 Do 20.09.2012, 12:29
Linkaufbau durch Google Alerts Michael Schöttler 1601 7 Mo 10.09.2012, 10:54
1000 Backlinks durch zwei Kommentare? Maju 1592 4 Do 28.06.2012, 15:39
Datenbank in der Cloud G.P. 504 4 Di 5.06.2012, 08:27
Weiteren Blog durch eigenen pushen? Ronny84 755 5 Mo 21.05.2012, 01:05
Wie findet man heraus, durch welche Keywords Sancheck 1609 10 Do 10.05.2012, 11:54
Ad-Sense - Noch Abzug vom Guthaben durch google? StephanBo 1157 6 Do 26.04.2012, 17:29
Rechnungsmenge durch Onlineshop Ronald Nickel 1173 4 Mo 9.01.2012, 18:55



Neu:  Kleinanzeige pinnen  |  Kleinanzeige auf Startseite  |  Werbetarife 2013  |  VIP Mitgliedschaft (30 Tage Geld-zurück-Garantie)



Anzeigen

Textlinks kaufen oder anbieten





[Hier werben]