• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Vorwahl und Rufnummer trennen

Tectum

New member
Hy Leute, so ich habe die aufgabe telefonnr aus spalte tel in vorwahl tel_v und rufnummer tel_r zu separieren.

Meine Idee war, ich nehme eine datendank mit allen Vorwahlen deutschlands und lass die gegen die telefonnr laufen, bei treffern wird vorwahl gespeichert und vorwahl aus tel gelöscht somit erhält man die rufnr.

So funktioniert auch soweit gut, nur sind es knapp 30.000 Vorwahlen in DE und die gegen 10.000 Kunden laufen zu lassen dauert ewig, bzw kackt der bei 50-60% ab, obwohl ich die setouttime auf 0 gesetzt habe.

Unten mein code, hat jemand ne idee den effizienter zu gestalten?

PHP:
$sql = mysql_query("SELECT vorwahl FROM ava_vorwahl") OR die(mysql_error());
while($row = mysql_fetch_array($sql))
{
	$vorwahl 	= $row['vorwahl'];
	$sql2 = mysql_query("SELECT id,tel FROM ava_kunden_$data_nr WHERE tel_v='' AND tel_r='' AND tel LIKE '$vorwahl%'") OR die(mysql_error());
	while($row2 = mysql_fetch_array($sql2))
	{
	$id2 	= $row2['id'];
	$tel 	= $row2['tel'];
	$rufnr	= ereg_replace($vorwahl,"",$tel);
	mysql_query("UPDATE ava_kunden_$data_nr SET tel_v='$vorwahl',tel_r='$rufnr' WHERE id='$id2'");
	}
}
 
Code:
SELECT `ava_kunden`.`id`, `ava_kunden`.`tel`, `ava_vorwahl`.`vorwahl`
FROM `ava_kunden`, `ava_vorwahl`
WHERE `ava_kunden`.`tel_v` = '' AND `ava_kunden`.`tel_r` = '' AND `ava_kunden`.`tel` LIKE CONCAT(`ava_vorwahl`.`vorwahl`, '%')
- ohne Gewähr, dass das schneller ist.
...und anstatt ereg_replace würde ich substr verwenden - ist sicherlich schneller.
 
also so?

PHP:
$sql = mysql_query("SELECT `ava_kunden_$data_nr`.`id`, `ava_kunden_$data_nr`.`tel`, `ava_vorwahl`.`vorwahl` FROM `ava_kunden_$data_nr`, `ava_vorwahl` WHERE `ava_kunden_$data_nr`.`tel_v` = '' AND `ava_kunden_$data_nr`.`tel_r` = '' AND `ava_kunden_$data_nr`.`tel` LIKE CONCAT(`ava_vorwahl`.`vorwahl`, '%')") OR die(mysql_error());
while($row = mysql_fetch_array($sql))
{
	$id 		= $row['id'];
	$tel 		= $row['tel'];
	$vorwahl 	= $row['vorwahl'];
	$rufnr		= substr($vorwahl,"",$tel);
	mysql_query("UPDATE ava_kunden_$data_nr SET tel_v='$vorwahl',tel_r='$rufnr' WHERE id='$id'");
}
 
Code:
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (latin1_german2_ci,IMPLICIT) for operation 'like'
 
das geht nicht :(

Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (latin1_german2_ci,IMPLICIT) for operation 'like'
 
das geht nicht :(

Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (latin1_german2_ci,IMPLICIT) for operation 'like'
Dann misch halt ned Schwedisch mit Deutsch, sondern entscheide Dich für eines. Ist sowieso komisch, wenn Du schwedische Tabellen oder Spalten in der Datenbank hast.
 
latin1 gibt der mir raus
Irgendwo muss er das herhaben mit dem Schwedisch. Und das kann eigentlich nur von der Tabelle, den Spalten oder der Verbindung kommen. Und es muss etwas sein, was direkt von der LIKE-Anweisung betroffen ist, sonst hätte er diese nicht angemäkelt.
 
Zurück
Oben