• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

erste ziffer aus plz herausfinden

Status
Für weitere Antworten geschlossen.

lucarp

Mitglied
Hallo,

Ich habe eine liste mit Postleitzahlen (5 stellig, soll aber auch mit anderen Formaten gehen) in einer MySQL DB.

Nun möchte ich mir die Einträge in Gebieten unterteilt ausgeben lassen:
Postleitzahlengebiet 0: alle mit 0 beginnend
Postleitzahlengebiet 1: alle mit 1 beginnend.....
..


Hat mir jemande einen denkanstoß oder einen schnipsel mit welchem ich das in PHP machen kann?

Der reihe nach mit aufsteigender PLZ ist ja kein Problem aber wie bekomme ich nur die erste Zahl der PLZ raus damit ich z.b.

PHP:
mysql_query ( "SELECT * FROM $mysqltable WHERE plz = "erste zahl 2" ORDER BY plz DESC " )
machen kann.

Danke
 
Wenn du z.B. eine Variable $plz mit dem Inhalt "54321" hast, dann reicht das hier:
PHP:
$stelle1 = $plz[0];
Zaubert "5" in $stelle1. ;)
 
wow.. cool ..das ist mal einfach..

aber kannst du mir noch sagen warum das so ist? kann man etwa mit [0] ,[1] usw. die einzelnen stellen eines string ansprechen?

wusste ich nicht.

Danke nochmal

grüße
 
aber kannst du mir noch sagen warum das so ist? kann man etwa mit [0] ,[1] usw. die einzelnen stellen eines string ansprechen
Nein, ehrlich gesagt habe ich bei PHP in den seltensten Fällen irgendeine Ahnung vom "Warum". :mrgreen:
Es wirkt ja irgendwie, als wäre der String hier eigentlich Array, das aus den einzelnen Zeichen zusammengesetzt ist. Ich finde das etwas merkwürdig, aber php.net :arrow: Strings (Abschnitt "String access and modification by character") zufolge soll man sich das auch so vorstellen. :shock:
 
ingoS ein string ist doch auch nur ein char array ^^

ach und wenn du das aus der mysql auslesen willst schreibst du z.b.

Code:
SELECT * FROM plzahlen WHERE plz LIKE '5%'

dann sucht er dir alle postleitzahlen die mit einer 5 beginnen ^^ wenn du das so schreiben würdest '%5%' würde er dir alle suchen die eine 5 enthalten und bei '%5' alle die mit einer 5 enden ;) :)
 
es ist beides ungefähr gleich schnell, bei 1000 durchläufen habe ich einen unterschied von nur fast 200 ms

Code:
LIKE, 1.000 durchgänge, dauer: 18.237334013
SUBSTRING, 1.000 durchgänge, dauer: 18.0804970264

hier mein benchmark ^^

PHP:
<?php

$conn = mysql_connect('localhost', 'root', '');
if($conn === false) {
	die('keine verbindung');
}

$db   = mysql_select_db('test', $conn);
if($db === false) {
	die('keine datenbank');
}

/* some create stuff
$r = mysql_query("
	CREATE TABLE IF NOT EXISTS plzahlen (
		plz INTEGER(5) NOT NULL
	);
");

if($r === false) {
	die('keine tabelle');
}

$query = "INSERT INTO plzahlen (`plz`) VALUES ";
$entrys = array();
for($i = 10000; $i < 99999; $i++) {
	$entrys[] = "('".$i."')";
}

$query .= implode(', ', $entrys) . ';';

$r = mysql_query($query);
if($r === false) {
	die('keine einträge');
}
*/

$s = microtime(true);
for($i = 0; $i < 1000; $i++) {
	mysql_query("SELECT plz FROM plzahlen WHERE plz LIKE '5%'");
}
echo "LIKE, 1.000 durchgänge, dauer: " . (microtime(true) - $s) . '<br />';

$s = microtime(true);
for($i = 0; $i < 1000; $i++) {
	mysql_query("SELECT plz FROM plzahlen WHERE SUBSTRING(plz, 0, 1) = '5'");
}
echo "SUBSTRING, 1.000 durchgänge, dauer: " . (microtime(true) - $s);
 
ingoS ein string ist doch auch nur ein char array ^^
Weiß ich PHP oda was? :-P
Lass mich doch einfach keine Ahnung haben; ich könnte mein Auto auch nicht selber reparieren... wenn ich eins hätte. ;ugl

Ok, jetzt mal im Ernst:
php.net schrieb:
Think of a string as an array of characters for this purpose.
Für mich als PHP-Unbedarfter klingt es diesem speziellen Satz folgend mehr wie eine Vorstellung als wie eine Tatsache.

So, ich glaube, ich habe mich jetzt genug blamiert und ziehe mich wieder aus dem Thema zurück. :mrgreen:
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben