phpbar.de logo

Mailinglisten-Archive

AW: verquerte Frage

AW: verquerte Frage

Wolfgang Hauck mysql-de_(at)_lists.bttr.org
Wed, 4 Sep 2002 11:30:33 +0200


>
> ich brauche dringend einmal ein wenig Hilfe.
> Meine Query treibt mich seit gestern zum Wahnsinn.
> Gegeben ist:
>  $row = (id=1,familie=1,partner=2,...) (id=2,familie=1,partner=1,...)
>
> Aufgabe ist nun, aus 2 Tabellen [Familien(lauter IDs), Personen]
> Informationen über die Partnerverhältnisse, Husband & Wife Namen
> etc herauszuholen. Mein Versuch lautete:
>
>  SELECT
>     	a.familie, a.partner,
>     	b.id, b.lastname, b.firstname, b.birthname
>   	FROM family AS a, person AS b
>   	WHERE a.partner = '$row[id]'
>   	AND a.partner = b.id
>   	GROUP BY b.id";
>
> Damit bekomme ich ein gemergtes Array aus beiden Tabellen:
> Array
> (
>     [familie] => 1
>     [partner] => 1
>     [id] => 1
>     [lastname] => Gans
>     [firstname] => Johann Gustav
>     [birthname] =>
> )
>
> Ich möchte aber folgendes angezeigt bekommen
> Array
> (
>     [familie] => 1
>     [partner_id] => 2
>     [partner_lname] => Gans
>     [partner_fname] => Anna Sophie
>     [partner_bname] => Gramel
>     [id] => 1
>     [lastname] => Gans
>     [firstname] => Johann Gustav
>     [birthname] =>
> )
>

Hi Christoph,

Das was du vorhast stimmt nicht mit der Struktur deiner Datenbank überein. 
Wenn ich dich richtig verstanden habe möchtest du eine Art Ahnentafel 
erstellen. So wie du das aufgebaut hast gehts im Leben nicht zu. Also bevor 
ich dir hier ne Query für falsche Gedanken rüberhaue gibts mal 
Grundkenntnisse in Datenbankstrukturen:

1. Du benötigst eine Personentabelle (Die hast du ja schon ;-) in der du 
alles einträgst was die Person betrifft.

2. Jetzt brauchst du eine Beziehungstabelle die folgendermassen aufgebaut 
ist:

CREATE TABLE beziehungen (
  bezid int(10) unsigned NOT NULL auto_increment,
  persid1 int(10) unsigned NOT NULL default '0',
  persid2 int(10) unsigned NOT NULL default '0',
  beziehungsart 
enum('verliebt','verlobt','verheiratet','geschieden','fremdgegangen','Fr  
eunde','Totfeinde') NOT NULL default 'verheiratet',
  PRIMARY KEY  (bezid)
)

Wie du siehst sind in dieser Tabelle zwei Personenid's und ein drittes Feld 
das die Beziehung beschreibt. Damit ist die Beziehung eindeutig definiert, 
was bei deinem Ansatz ja nicht der Fall ist.
Jetzt gehts weiter ;-))
Zwei Personen sind ja nicht nur zusammen um Händchen zu halten, sondern... 
du weisst schon, das mit den Schmetterlingen und so...
Also da brauchen wir doch noch was, ach ja Kinder!!

3. Die Kidstabelle:

CREATE TABLE kinder (
  kidid int(10) unsigned NOT NULL auto_increment,
  bezid int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (kidid)
)

So jetzt ham ma alles beinand.

Jetzt kannst du z.B. alle verheirateten Paare suchen:

SELECT b.*, c.*
FROM beziehungen as a LEFT JOIN personen as b ON a.persid1 = b.persid
LEFT JOIN personen as c ON a.persid2 = c.persid where beziehungsart = 
'verheiratet'

Klar?


Nächste Aufgabe:

Suche alle Kinder geschiedener Eltern?

oder

Suche alle Grossväter?

oder

Wer ist Onkel oder Tante?

Aber a bisserl was sollst du ja auch noch machen ;-))

MFG Wolfgang

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive