straße und hausnummer trennen

tkshorty
hi ich habe eine tabelle in der unteranderem ein feld straße/hausnummer ist.
wenn ich danach sortiere was in diesem fall meistens vorkommt, ist die rathausstraße 10 vor rathausstraße 2.
aus diesem grund hab ich vor dieses feld zu trennen und suche ein script das das automatisch macht. hab nur leider keine ahnung wie ich dem script klarmachen soll, wo es die trennung vornehmen soll.

hoffe irgendjemand weiß da ne lösung
daHooligan
sollte hiermit gehen, das script hat nur ein problem wenn straße und hausnummer nicht durch " " getrennt sind oder falsch getrennt sind (sägmühlenweg 2 - 4 man beachte die leerzeichen zwischen den zahlen und dem bindestrich.
evtl. könnte man noch eine fehler meldung einbauen die überprüft ob die adresse im richtigen format vorliegt...

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

<?
$hnr="";
$str="";
$i=0;

while($strhnr[$i]!=" "//leerzeichen als trenner zwischen straße und hausnummer
{$str.=$strhnr[$i];$i++;} //hausnummer erzeugen
$i++; //entfernt das leerzeichen (trennzeichen)
while($i<=strlen($strhnr))
{$hnr.=$strhnr[$i];$i++;}
echo $hnr;
?>


MfG

daHool
Heaven
Hier mal eine etwas andere Variante

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<?php
$haus = array(=> 'Sant jürgensweg 2'=> 'Halliwood 2 - 3'=> 'Margenberg-str 3');

$split = array();
for($i 0$c count($haus);$i $c$i++)
{
 $split[] = preg_split('~([^\d]*) (.*)~' ,$haus[$i], -,PREG_SPLIT_DELIM_CAPTURE PREG_SPLIT_NO_EMPTY);
}
print_r($split);
?>


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
Array
(
    [0] => Array
        (
            [0] => Sant jürgensweg
            [1] => 2
        )

    [1] => Array
        (
            [0] => Halliwood
            [1] => 2 - 3
        )

    [2] => Array
        (
            [0] => Margenberg-str
            [1] => 3
        )

)
tkshorty
danke klappt wunderbar.

ich versteh zwar den regulären ausdruck net so ganz aber naja
tkshorty
so jetzt hab ich das zwar in versiedenen feldern, aber da ich die hausnummern nicht als int speichern kann (wegen z.B. 1-2 oder 12a)
habe ich trotzdem noch die falsche sortierung.
kann mir da auch jemand weiterhelfen?
am besten wäre natürlich wenn das schon auf sql-ebene möglich wäre
daHooligan
was willst du mit der hausnummer sortieren??
tkshorty
in meiner tabelle sind bauplätze gespeichert.

die datensätze sollen sortiert ausgegeben werden und zwar nach straße und dann nach hausnummer. ich bekomm zur zeit sowas raus

bahnhofstr 1
bahnhofstr 10
bahnhofstr 2
bahnhofstr 22-24


ich hätt das ganze nun gerne richtig ausgegeben also

1
2
10
22-24

dafür müssten die hnr's eigentlich int ssein aber da auch 1-2, 2a usw möglich sein sollen muss ich die als char speichern. wie kann ich jetzt trotzdem richtig sortieren?
tkshorty
habs selbst hinbekommen

wenns jemanden interssiert

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
SELECT     *, CONVERT(int, ISNULL(q1.hnr1, ' ') + ISNULL(q2.hnr1, ' ') + ISNULL(q3.hnr1, ' ')) AS hnr2
FROM         baugenehmigungen b LEFT OUTER JOIN
                          (SELECT     id, substring(HNr, 1, 1) AS hnr1
                            FROM          baugenehmigungen
                            WHERE      isnumeric(substring(HNr, 1, 1)) = 1) q1 ON b.id = q1.id LEFT OUTER JOIN
                          (SELECT     id, substring(HNr, 2, 1) AS hnr1
                            FROM          baugenehmigungen
                            WHERE      isnumeric(substring(HNr, 2, 1)) = 1) q2 ON b.id = q2.id LEFT OUTER JOIN
                          (SELECT     id, substring(HNr, 3, 1) AS hnr1
                            FROM          baugenehmigungen
                            WHERE      isnumeric(substring(HNr, 3, 1)) = 1) q3 ON b.id = q3.id
ORDER BY b.Strasse, hnr2, b.Name, b.Vorname, b.genehmigt, b.abgelehnt, b.eingereicht
ThiefMaster
Nur so nebenbei, <> ist Basic-Müll. In PHP/C/etc. wird dafür != verwendet.
sohalt
Mal ne frage (nur aus eigenem Interresse)

Geht das nicht auch irgendwie mit explode() ?

MfG,
Alex
daHooligan
php:
1:
2:
3:
4:
<?php $adresse  "irgendeinestraße 1";
$teile explode(" "$adresse);
echo $teile[0]; // straße
echo $teile[1]; // hausnummer ?>

so ginge das. das problem ist nur dass dann leerzeichen in der straße auch als trenner gesehen werden, man könnte allerdings dann wieder alleteile außer dem letzten zusammensetzen, das wäre dann meine lösung.
das zusammensetzen:
php:
1:
2:
3:
4:
<?php $i=0;
while($i<count($teile))
{$straße.=$teile[$i];}
$hausnummer=$teile[count($teile)]; ?>


sollte auch so gehen
chrigu99
tkshorty, was mich interessieren würde was du für ein "programm" schreibst? ich arbeite selber auch in der baubranche... smile
tkshorty
@chrigu
ich arbeite auf ner gemeinde und hab ne oberfläche für ne datenbank zur erfassung von baugenehmigungen mit allen daten drum und dran geschrieben