MySQL Adressbuch mit zwei Anschriften
flotschi301
- datenbank
0 ChrisB0 dedlfix0 flotschi301
ich habe ein Adressbuch unter Mysql angelegt in dem zwei anschriften hinterlegt sind.
Die Orte habe ich in einer separaten Tabelle eingetragen und mit einem LEFT JOIN verbunden.
Dies funktioniert aber leider nur für die eine Adresse, nicht für die zweite.
Wenn ich einen zeiten LEFT JOIN einfüge bekomme ich den Fehler, dass der Wert "Orte" unique ist.
<html>
<head>
<title>Adressen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
error_reporting(E_ALL);
require_once ('config_adresse.php');
mysql_connect(MYSQL_HOST,MYSQL_BENUTZER,MYSQL_KENNWORT ) or
die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db(MYSQL_DATENBANK) or
die("Auswahl der Datenbank fehlgeschlagen");
$abfrage = "SELECT *
FROM adressen
LEFT JOIN orte ON adressen.plzgew = orte.plz
WHERE adressen.plzgew = orte.plz
LEFT JOIN orte ON adressen.plzpriv = orte.plz
ORDER BY nachname";
$ergebnis = mysql_query($abfrage);
$res = mysql_query("SELECT nachname FROM adressen");
$num = mysql_num_rows($res);
echo "<table border=\"0\" width=\"2800\">";
echo "<tr bgcolor=\"E1E8F1\" class=\"tablehead\">";
echo "<td>ID</td>";
echo "<td>Nachname</td>";
echo "<td>Vorname</td>";
echo "<td>Firma</td>";
echo "<td>Strasse gew.</td>";
echo "<td>PLZ gew.</td>";
echo "<td>Ort gew.</td>";
echo "<td>Tel. gew.</td>";
echo "<td>Mobil gew.</td>";
echo "<td>Fax gew.</td>";
echo "<td>Strasse priv.</td>";
echo "<td>Plz priv.</td>";
echo "<td>Ort priv.</td>";
echo "<td>Tel. priv.</td>";
echo "<td>Mobil priv.</td>";
echo "<td>Fax priv.</td>";
echo "<br>";
echo "</tr>";
echo "</table>";
echo "<tr><td colspan=\"15\">Anzahl Einträge in der Datenbank: ";
echo $num;
echo "<td></tr>";
echo "</table>";
while ($row = mysql_fetch_array( $ergebnis, MYSQL_ASSOC)) {
$data[] = $row;
}
echo "<table border=\"0\">";
foreach($data as $key => $value) {
?>
<?php if(($key % 2) == 1) { ?>
<tr bgcolor="FFFFFF">
<?php } else { ?>
<tr bgcolor="E1E8F1">
<?php } ?>
<td><?php echo $value['id']; ?></td>
<td><?php echo $value['nachname']; ?></td>
<td><?php echo $value['vorname']; ?></td>
<td><?php echo $value['firma']; ?></td>
<td><?php echo $value['strassegew']; ?></td>
<td><?php echo $value['plzgew']; ?></td>
<td><?php echo $value['ort']; ?></td>
<td><?php echo $value['telgew']; ?></td>
<td><?php echo $value['mobilgew']; ?></td>
<td><?php echo $value['faxgew']; ?></td>
<td><?php echo $value['strassepriv']; ?></td>
<td><?php echo $value['plzpriv']; ?></td>
<td><?php echo $value['ort']; ?></td>
<td><?php echo $value['telpriv']; ?></td>
<td><?php echo $value['mobilpriv']; ?></td>
<td><?php echo $value['faxpriv']; ?></td>
</tr>
<?php } ?>
<?php
echo "</table>";
?>
</body>
</html>
Hi,
Wenn ich einen zeiten LEFT JOIN einfüge bekomme ich den Fehler, dass der Wert "Orte" unique ist.
Tatsächlicher Wortlaut der Fehlermeldung …?
Ich vermute eher sowas wie “each derived table must have it’s own alias” … wenn das der Fall sein sollte: Dann gebe ihnen Aliase.
MfG ChrisB
Hi,
Wenn ich einen zeiten LEFT JOIN einfüge bekomme ich den Fehler, dass der Wert "Orte" unique ist.
Tatsächlicher Wortlaut der Fehlermeldung …?
Ich vermute eher sowas wie “each derived table must have it’s own alias” … wenn das der Fall sein sollte: Dann gebe ihnen Aliase.
MfG ChrisB
Bei folgender Abfrage
SELECT * FROM adressen
LEFT JOIN orte ON adressen.plzgew = orte.plz
LEFT JOIN orte ON adressen.plzpriv = orte.plz
erhalte ich diesen Fehler:
#1066 - Not unique table/alias: 'orte'
Hi,
Bei folgender Abfrage
SELECT * FROM adressen
LEFT JOIN orte ON adressen.plzgew = orte.plz
LEFT JOIN orte ON adressen.plzpriv = orte.plz
>
> erhalte ich diesen Fehler:
> #1066 - Not unique table/alias: 'orte'
Na ja, nah genug dran an dem, was ich vermutet hatte.
Also: Vergebe unterschiedliche Aliase …
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Hi,
Bei folgender Abfrage
SELECT * FROM adressen
LEFT JOIN orte ON adressen.plzgew = orte.plz
LEFT JOIN orte ON adressen.plzpriv = orte.plz
> >
> > erhalte ich diesen Fehler:
> > #1066 - Not unique table/alias: 'orte'
>
> Na ja, nah genug dran an dem, was ich vermutet hatte.
>
> Also: Vergebe unterschiedliche Aliase …
>
> MfG ChrisB
>
>
kannst du mir das nnäher erklären? ich bin noch totaler noob auf dem gebiet und meine suchen im internet waren bisher erfolglos...
orte und orte sind der gleiche Name. das "= orte.plz" weiß nicht worauf es sich beziehen soll.
Schreib
SELECT * FROM adressen
LEFT JOIN orte o1 ON adressen.plzgew = o1.plz
LEFT JOIN orte o2 ON adressen.plzpriv = o2.plz
orte und orte sind der gleiche Name. das "= orte.plz" weiß nicht worauf es sich beziehen soll.
Schreib
SELECT * FROM adressen
LEFT JOIN orte o1 ON adressen.plzgew = o1.plz
LEFT JOIN orte o2 ON adressen.plzpriv = o2.plz
das war schonmal ein Ergebnis... danke dafür. Nun habe ich versucht dies in mein php-scrip einzubauen, scheitere baer an der korrekten rückgabe des wertes "ort". Bei Eingabe von "Ort" als Rückgabeindex erscheint bei beiden Einträgen derselbe Wert (ist ja auch logisch). Nun habe ich versucht, alle möglichen KOmbinationen des oben genannten o1/o2 mit in den Wert "ort" einzubauen... bekomme aber immer dir Rückmeldung "undefined index"
kann ich euch noch einmal bemühen?
Tach!
Bei Eingabe von "Ort" als Rückgabeindex erscheint bei beiden Einträgen derselbe Wert (ist ja auch logisch).
Beide Einträge? Es gibt nur ein $foo['bar'] auch wenn du zweimal was reinschreibst.
Nun habe ich versucht, alle möglichen KOmbinationen des oben genannten o1/o2 mit in den Wert "ort" einzubauen... bekomme aber immer dir Rückmeldung "undefined index"
kann ich euch noch einmal bemühen?
Auch da helfen Aliase. Du musst nur mindestens diese beiden Felder konkret angeben und nicht hoffen, dass der * es richtig macht. Außerdem musst du nicht rumraten sondern kannst dir mit print_r() oder var_dump() anzeigen lassen, was dir die Fetch-Funktion zurückgibt.
dedlfix.
Moin!
orte und orte sind der gleiche Name. das "= orte.plz" weiß nicht worauf es sich beziehen soll.
Schreib
SELECT * FROM adressen
LEFT JOIN orte o1 ON adressen.plzgew = o1.plz
LEFT JOIN orte o2 ON adressen.plzpriv = o2.plz
Dein Datenmodell ist leider fehlerhaft.
Du denkst, die Postleitzahl wäre einmalig und eindeutig, so dass du anhand der PLZ immer genau einen Ortsnamen bekommst.
Das ist FALSCH! Einunddieselbe PLZ kann durchaus zu MEHREREN Ortsnamen gehören, und es ist für die Postzustellung notwendig, dass man den Ort separat angibt.
Beispielsweise gehört die PLZ 26835 zu sechs Orten: http://www.plz-postleitzahl.de/land.niedersachsen/plz-26835.html
Dir bleibt nichts anderes übrig, als den Ortsnamen mit in deinen Datensatz zu speichern. Dann sparst du dir aber auch jeden Subrequest oder Join.
- Sven Rautenberg
Moinsen!
Das ist FALSCH! Einunddieselbe PLZ kann durchaus zu MEHREREN Ortsnamen gehören, und es ist für die Postzustellung notwendig, dass man den Ort separat angibt.
Kann? Diese scheiss Teile gehören sogar Orten in unterschiedlichen Bundesländern. Was die Post mit den PLZ macht ist nur Mist. Scheinbar können sich Mitarbeiter der Post heutzutage nur eine PLZ merken in der sie zustellen...
Hi,
Das ist FALSCH! Einunddieselbe PLZ kann durchaus zu MEHREREN Ortsnamen gehören, und es ist für die Postzustellung notwendig, dass man den Ort separat angibt.
Kann? Diese scheiss Teile gehören sogar Orten in unterschiedlichen Bundesländern.
Kannst Du dafür bitte ein oder zwei Beispiel-PLZ nennen?
Was die Post mit den PLZ macht ist nur Mist.
Die haben die POST-Leitzahlen halt nach den Bedürfnissen der Post vergeben, nicht nach den Bedürfnissen von Verwaltungen ...
Ich hatte mal die Gelegenheit, eine Führung in einem Post-Verteilzentrum (München, in der ehemaligen Paketposthalle), mitzumachen. War sehr interessant, die Verteilmaschinen bei der Arbeit zu sehen!
cu,
Andreas
Hi,
Das ist FALSCH! Einunddieselbe PLZ kann durchaus zu MEHREREN Ortsnamen gehören, und es ist für die Postzustellung notwendig, dass man den Ort separat angibt.
Kann? Diese scheiss Teile gehören sogar Orten in unterschiedlichen Bundesländern.Kannst Du dafür bitte ein oder zwei Beispiel-PLZ nennen?
Kommt
prompt:
Braake und Stapelfeld sind Orte in Schleswig Holstein. Biede teien sich die PLZ 22145 mit einem Teil von Hamburg Rahlstedt.
Zur PLZ- und Addresssuche der Post
Ich behaupte das nicht einfach nur so. Ich schlag mich mit sowas dauernd rum.
Es ist in D nicht moeglich eine PLZ einem Ort oder einem Bundesland zuzuteilen. Ausser man faengt an und schummelt sich eien zurecht. Das muss ich dauernd weil unser System ein Bundesland, eine PLZ und nur einen Ortseintrag zulaesst. Bei uns sind die beiden oben genannten Orte unter Hamburg abgespeichert, weil etwaige Kunden aus den kleineren Orten neben Hamburg sich wohl eher mit Hamburg identifizieren als ein Rahlstedter Kunde mit Braake...
Hi,
Das ist FALSCH! Einunddieselbe PLZ kann durchaus zu MEHREREN Ortsnamen gehören, und es ist für die Postzustellung notwendig, dass man den Ort separat angibt.
Kann? Diese scheiss Teile gehören sogar Orten in unterschiedlichen Bundesländern.
Kannst Du dafür bitte ein oder zwei Beispiel-PLZ nennen?
Kommt prompt:
Sorry, daß ich erst jetzt reagiere - ich war seit Freitag auf Betriebsausflug und bin grade erst wieder zurück ...
Braake und Stapelfeld sind Orte in Schleswig Holstein. Biede teien sich die PLZ 22145 mit einem Teil von Hamburg Rahlstedt.
Danke!
Zur PLZ- und Addresssuche der Post
Ich behaupte das nicht einfach nur so.
Das hätte ich auch nicht unterstellen wollen. Ich schlag mich auch täglich mit Adressen rum - mir war nur bisher noch kein Beispiel untergekommen, bei dem sogar unterschiedliche Bundesländer im Spiel sind.
Wobei für mich die Bundesländer keine große Rolle spielen, bei mir geht's eher um KFZ-Zulassungsbezirke (auch da gibt's PLZ, die in mehrere Zulassungsbezirke fallen - hab aber kein Beispiel greifbar ...)
cu,
Andreas
Hi,
Du denkst, die Postleitzahl wäre einmalig und eindeutig, so dass du anhand der PLZ immer genau einen Ortsnamen bekommst.
Das ist FALSCH! Einunddieselbe PLZ kann durchaus zu MEHREREN Ortsnamen gehören, und es ist für die Postzustellung notwendig, dass man den Ort separat angibt.
Beispielsweise gehört die PLZ 26835 zu sechs Orten: http://www.plz-postleitzahl.de/land.niedersachsen/plz-26835.html
Ergänzung:
Bei 6 Ortsnamen für eine PLZ ist noch lang noch nicht Schluß ... ;-)
16845 bringt es z.B. auf 29 Ortsnamen (Ob das schon das Maximum ist, weiß ich nicht).
Den umgekehrten Fall gibt es aber auch - eine Stadt, viele PLZ (Berlin, Hamburg, München ...) - und teilweise hat sogar eine Straße mehrere PLZ (Landsberger Str. in München - je nach Hausnummer 80339, 80687, 81241, also sogar unterschiedlich in der 2. Stelle!)
Und Ortsnamen sind auch nicht wirklich eindeutig (z.B. Lindau - am Bodensee, bei Kiel, in Anhalt)
cu,
Andreas
Tach!
Die Orte habe ich in einer separaten Tabelle eingetragen und mit einem LEFT JOIN verbunden.
Wenn du aus der Orte-Tabelle nur einen einzigen Wert brauchst - den Ortsnamen - dann frag diesen mit einem Subselect ab (geht auch zweimal). Das ist einfacher zu handhaben als die Joinerei.
Dies funktioniert aber leider nur für die eine Adresse, nicht für die zweite.
Wenn ich einen zeiten LEFT JOIN einfüge bekomme ich den Fehler, dass der Wert "Orte" unique ist.
SELECT *
FROM adressen LEFT JOIN orte ON adressen.plzgew = orte.plz WHERE adressen.plzgew = orte.plz LEFT JOIN orte ON adressen.plzpriv = orte.plz ORDER BY nachname
Bei diesem Code (dein HTML- und PHP-Zeugs interessiert bei dem Problem nicht) erwarte ich eher einen Syntaxfehler, weil nach dem WHERE kein JOIN auftreten darf. JOIN gehört zu FROM. Wenn deine Absicht wäre, eine weitere für den Join (und nicht nur für die allgemeine Einschränkung der Datensätze) relevante Bedingung anzugeben, dann musst du diese mit AND (oder OR) an die Join-Bedingung anhängen.
Wenn du mehr als einen Wert aus der Ortstabelle benötigst, dann braucht es doch Joins, dann musst du die beiden Tabellen zur Unterscheidung mit je einem Alias versehen.
dedlfix.
nagut, me give up... ich mach es doch manuell... ds is mir zu viel aufwand... evtl. finde ich ja mal eine andere Datenbank, in der ich das wieder aufnehmen kann...
Danke an alle Antworten.