Array auswerten
am 29.08.2006 02:22:35 von kpl
Hallo,
ich habe folgende Problemstellung:
In einer Mysql-Datenbank sind Datensätze pro Person gespeichert. Eines der
Felder enthält zu jeder Person zugeordnete Postleitzahlbereiche, die als
String gespeichert sind. Da je PLZ-Bereich mindestens 1 und höchstens 5
Stellen hinterlegt werden, kann so ein Inhalt des Feldes (es heißt 'gebiet')
wie folgt aussehen (# ist der Trenner):
10#201#3#4068#4070#809
Es ist möglich, dass die gleichen Bereiche auch in anderen Datensätzen
vorhanden sind, z. B. kann der nächste so aussehen:
1105#201#20#40#789
Zu jedem Datensatz gehören unterschiedlich viele Bereiche, völlig
kunterbunt.
Jetzt will ich nach Vorgabe einer Postleitzahl die Datensätze heraus finden,
die dazu passen. Z. B. soll dieVorgabe der PLZ 40689 beide Datensätze
ausgeben, die PLZ 10678 nur den ersten, 81749 keinen usw.
Ich habe das so versucht:
while(list($plz) = mysql_fetch_row($res2)) {
$result=explode("#", $gebiet);
$_geb = array_unique($result);
$anz_geb = count($_geb);
for ($i=0; $i<$anz_geb; $i++) {
$hveplz=$_geb[$i];
$anzzeichen = strlen($hveplz);
$checkplz = substr($plz, 0, $anzzeichen);
if ($checkplz == $hveplz) {
$treffer = '1';
Das funktioniert aber nicht richtig, weil nicht immer alle Datensätze
gefunden werden (ich denke, durch das array_unique ??).
Weiß jemand dafür eine Lösung?
Besten Dank von Klaus
Re: Array auswerten
am 29.08.2006 02:42:36 von Frank Schenk
Klaus P. Lewohn schrieb:
> Es ist möglich, dass die gleichen Bereiche auch in anderen Datensätzen
> vorhanden sind, z. B. kann der nächste so aussehen:
> 1105#201#20#40#789
> Jetzt will ich nach Vorgabe einer Postleitzahl die Datensätze heraus finden,
> die dazu passen. Z. B. soll dieVorgabe der PLZ 40689 beide Datensätze
> ausgeben, die PLZ 10678 nur den ersten, 81749 keinen usw.
>
Die Variable brauchen wir gleich noch:
$arr_treffer = array();
// statt mysql_fetch_row besser fetch_assoc verwenden
while ($row = mysql_fetch_assoc($res2)) {
// nun können wir über den Feldnamen auf den Wert zugreifen
$gebiete = explode("#", $row['gebiet']);
// sollte eigentlich überflüssig sein
$gebiete = array_unique($gebiete);
// nun alle gebiete durchlaufen
foreach($gebiete as $key){
// strpos false = nicht gefunden
if(strpos($checkplz, $key) === false){
// nicht gefunden
} else {
// statt id den Wert hinzufügen, den du brauchst
array_push($arr_treffer, $row['id']);
}
}
print_r($arr_treffer);
hth, Frank
Re: Array auswerten
am 29.08.2006 18:45:28 von Helmut Chang
Klaus P. Lewohn schrieb:
> In einer Mysql-Datenbank sind Datens�tze pro Person gespeichert. Eines der
> Felder enth�lt zu jeder Person zugeordnete Postleitzahlbereiche, die als
> String gespeichert sind. Da je PLZ-Bereich mindestens 1 und h�chstens 5
> Stellen hinterlegt werden, kann so ein Inhalt des Feldes (es hei�t 'gebiet')
> wie folgt aussehen (# ist der Trenner):
> 10#201#3#4068#4070#809
Das Datenmodell ist aber fest kaputt.
CREATE TABLE person (
idPerson ...
);
CREATE TABLE gebiet (
gebiet ...
);
CREATE TABLE gebietFuerPerson (
idPerson ...,
gebiet
);
wäre ein erster Ansatz, wenn auch noch nicht ideal.
> Jetzt will ich nach Vorgabe einer Postleitzahl die Datens�tze heraus finden,
> die dazu passen. Z. B. soll dieVorgabe der PLZ 40689 beide Datens�tze
> ausgeben, die PLZ 10678 nur den ersten, 81749 keinen usw.
SELECT DISTINCT idPerson
FROM gebietFuerPerson
WHERE gebiet IN (4, 40, 406, 4068, 40689);
bei obiger Struktur.
gruss, heli
Re: Array auswerten
am 30.08.2006 11:53:21 von kpl
Danke für die Mühe.
Allerdings lief es so bei mir nicht. Ich habe nochmal gebastelt und eine
(etwas aufwändigere, aber funktionierende) Lösung gefundn.
--
Viele Grüße
Klaus
Re: Array auswerten
am 30.08.2006 12:09:42 von Sebastian Wessel
Klaus P. Lewohn schrieb:
> Danke für die Mühe.
>
> Allerdings lief es so bei mir nicht. Ich habe nochmal gebastelt und eine
> (etwas aufwändigere, aber funktionierende) Lösung gefundn.
Die wie aussieht?
Da die News auf dem Server mindestens ein Jahr geseichert werden (weiter
gehts bei mir nicht) und über Google noch in Jahrzehnten abrufbar sind
wäre es für jemanden, der das gleiche Problem hat wie du interessant zu
erfahren wie du es gelöst hast und nicht nur einfach dass du es gelöst
hast ;)
--
MfG Sebastian Wessel
"Wer Dich wegen deines Hemdes verprügelt ist nicht dein Freund."
(March Simpson)