PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQL/MySQLi (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   MYSQL Verschachtelte Abfrage mit Replace - wer kann helfen??? (http://www.selfphp.de/forum/showthread.php?t=25014)

supermoto 22.07.2013 00:27:49

MYSQL Verschachtelte Abfrage mit Replace - wer kann helfen???
 
Hallo Zusammen,

irgendwie komme ich nicht auf die Lösung. Ich habe eine MYSQL mit einem PLZ Feld (plz) in dem PLZs aus ganz Europa, also auch mit 4 oder 5 Stellen sind. Ebenso gibt es ein Feld (land) das bestimmt welches Land es ist. nun ist beim Datenimport bei den PLZs die vorangestellte 0 der neuen Bundesländer verloren gegangen. Einfach eine Null mittels "unsigned zerofill" hinzufügen geht ja nicht, da es auch 4stellige PLZs - zB Österreich - gibt. Man müsste also Eine Abfrage haben die die DE PLZs mit vier Stellen findet und eine 0 am Anfang einfügt. Leider komme ich nicht drauf wie ich das machen kann. Muss auch zugeben, dass ich nicht so sehr fit bin mit mysql. Ach ja ein phpmyadmin ist vorhanden.

Wäre sehr dankbar und würde mich sehr freuen, wenn mir jemand helfen kann!

vt1816 22.07.2013 09:13:52

AW: MYSQL Verschachtelte Abfrage mit Replace - wer kann helfen???
 
Hallo und willkommen hier im Forum.


Wie sehen denn Deine bisherigen Bemühungen aus?
Wie sieht die Struktur Deiner Datenbanktabelle aus?

supermoto 22.07.2013 09:51:38

AW: MYSQL Verschachtelte Abfrage mit Replace - wer kann helfen???
 
Hallo vt1816,

vielen Dank für Dein Willkommenspost.

Die Tabelle sieht folgendermaßen aus:

Feld Typ Null Standard Kommentare MIME
id int(10) Nein
produkt varchar(100) Nein
plz_von mediumint(5) Nein
plz_bis mediumint(5) Nein
firma varchar(50) Nein
name varchar(50) Nein
vorname varchar(50) Nein
anrede varchar(25) Nein
titel varchar(25) Nein
plz varchar(5) Nein
ort varchar(50) Nein
strasse varchar(50) Nein
land varchar(50) Nein
angezeigtes_land varchar(2) Nein
vorwahl varchar(50) Nein
festnetz varchar(50) Nein
mobil varchar(50) Nein
vorwahlf varchar(50) Nein
fax varchar(50) Nein
email varchar(100) Nein
kunde int(1) Nein
neukunde int(1) Nein
leistungsbereich varchar(100) Nein

Meine Bemühungen sehen wie folgt aus:

Googeln nach einer Lösung, lesen des mySQL Handbuchs und das ausprobieren in einer Testumgebung. Ich kann mir ohne Probleme die Datensätze heraussuchen und ersetzen, aber vor einen vorhandenen Wert mit 4 Stellen eine 0 hinzuzufügen mit der Bedingung, dass es nur die Datensätze mit dem Kriterium land = de gibt habe ich noch nicht geschafft.

Wäre sehr dankbar für einen Tipp!

vt1816 22.07.2013 14:14:42

AW: MYSQL Verschachtelte Abfrage mit Replace - wer kann helfen???
 
Ok, dann zeig mal noch Deine (bisheriges) SQL-Statments.

meikel (†) 24.07.2013 07:29:21

AW: MYSQL Verschachtelte Abfrage mit Replace - wer kann helfen???
 
Zitat:

Zitat von supermoto (Beitrag 145290)
Ich kann mir ohne Probleme die Datensätze heraussuchen und ersetzen, aber vor einen vorhandenen Wert mit 4 Stellen eine 0 hinzuzufügen mit der Bedingung, dass es nur die Datensätze mit dem Kriterium land = de gibt habe ich noch nicht geschafft.
Wäre sehr dankbar für einen Tipp!

Internationale Postleitzahlen sind Strings und kein Integer, weil sie Vornullen u/o Buchstaben enthalten können.

Das
plz varchar(5) Nein
dürfte zu knapp werden. Hier ein Beispiel:
Code:

MA 02149-1208
Das
Code:

land varchar(50) Nein
ist allerdings zu fett. Da reichen 2 oder 3 varchars aus.

supermoto 25.07.2013 03:38:00

Zitat:

Zitat von vt1816 (Beitrag 145292)
Ok, dann zeig mal noch Deine (bisheriges) SQL-Statments.

Hallo vt1816,

sorry für die späte Rückmeldung.

Also ich habe folgende Abfrage um mir die Datensätze zu selektieren, allerdings weiss ich halt nicht wie ich dann vorgehen soll um diesen Datensätzen die 0 vor die vorhandenen Zahlen zu setzen. Quasi aus 1737 dann 01737 zu machen (aber nur für die Daten mit land = 'de').

Hier meine bisherige Abfrage:
Code:

SELECT * FROM `tabellenname` WHERE `plz` < 10000 AND land = 'de'
Zitat:

Zitat von meikel (Beitrag 145296)
Internationale Postleitzahlen sind Strings und kein Integer, weil sie Vornullen u/o Buchstaben enthalten können.

Das
plz varchar(5) Nein
dürfte zu knapp werden. Hier ein Beispiel:
Code:

MA 02149-1208
Das
Code:

land varchar(50) Nein
ist allerdings zu fett. Da reichen 2 oder 3 varchars aus.

Danke für den Hinweis und die Infos!

vt1816 25.07.2013 09:20:29

AW: MYSQL Verschachtelte Abfrage mit Replace - wer kann helfen???
 
Zitat:

Zitat von supermoto (Beitrag 145297)
[]
Hier meine bisherige Abfrage:
Code:

SELECT * FROM `tabellenname` WHERE `plz` < 10000 AND land = 'de'

Dann schau Dir mal UPDATE und CONCAT an.
Code:

UPDATE `tabellenname`
    SET `plz` = CONCAT("0", `plz`)
    WHERE `plz` < 10000 AND land = 'de';

*** ungetestet! ***

supermoto 25.07.2013 10:44:23

AW: MYSQL Verschachtelte Abfrage mit Replace - wer kann helfen???
 
Zitat:

Zitat von vt1816 (Beitrag 145299)
Dann schau Dir mal UPDATE und CONCAT an.
Code:

UPDATE `tabellenname`
    SET `plz` = CONCAT("0", `plz`)
    WHERE `plz` < 10000 AND land = 'de';

*** ungetestet! ***

Hallo vt1816,

vielen, vielen Dank! You made my day! Genau das war es, hab's erst in der Testumgebung probiert und dann im Livesystem. Hat super geklappt. Danke!

Schau mir auch mal die Themen CONCAT und UPDATE an.

:)


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:53:46 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.