verknüpfung mit mehreren datensätzen

TheMike

Mitglied
tach ihrser

also, ich hab folgendes prob:

ich hab im mysql einerseits ne tabelle mit allen adressen. mit 0- oder 1-werten wird in verschiedenen spalten festgelegt, ob die adresse zu nem kunden, lieferanten, partner oder zu mehreren gehört.

so weit so gut, funzt auch alles tiptop.

aber wenn ich in ner zweiten tabelle mit den projekten die verknüpfungen (über id-wert der adress-tabelle) mache, sind ja pro projekt mehrere adressen verknüpft.

und wenn ich dann die abrage wie gewohnt mache:

$ergebnis = mysql_query( "SELECT * FROM projekte_gu p, adressen a
WHERE p.kunde = a.id
ORDER by $ord $dir " );
$anz_reihen = mysql_num_rows( $ergebnis );

for ( $i="0"; $i<$anz_reihen; $i++)
{
$id = mysql_result($ergebnis, $i, "p.id");
$kunde = mysql_result($ergebnis, $i, "a.name");
usw...
}

is das auch ganz nett ... aber weil ich ja mehrere adressen pro projekt habe, wird mit a.name kaum der korrekte gewählt.

is mein prob einigermassen verständlich?

wie könnt man das umgehen?

ich hab mir schon überlegt, bei jedem projekt für den kunden nochmal ne eigene abfrage zu machen ( $ergebnis_projekt = mysql_query( "SELECT * FROM adressen WHERE id = $kunde " ); ), aber dann kann ich die ganze abfrage nicht nach dem kunden oder dem lieferanten sortieren lassen. und das würd ich schon gern.
oder ich mach pro adress-art (kunden, lieferanten, partner ... ) ne eigene adresstabelle. aber dann müsst ich die auch einzeln verwalten und könnt in ner gesammtübersicht auch net beliebig sortieren.


thx
 
eine andere sql abfrage löst das problem:

SELECT * FROM projekte_gu as p, adressen as a on p.kunde=a.id
WHERE ...... usw
 
hmm ... mal ganz abgesehen davon, dass bei mir ne fehlermeldung wegen ner ungültigen abfrage kommt, wenn ich das probiere - soweit ich das verstehe, ist damit das prob net gelöst.

die abfrage funzt ja so wie ichs oben beschrieben hab, aber bei der zuweisung der variablen gibs probleme, weil ich halt mehrer adressen mit dem projekt verknüpft hab und somit auch mehrere a.id's habe ...
 
und somit auch mehrere a.id's habe ...

na und :)

da wir mit meinem beispiel eine join verbindung haben geht das

die - on - angabe gibt ja an wie die felder verküpft werden sollen

on p.kunde=a.id verküpft die felder kunde und id
auch wenn pro p.kunde viele a.id vorhanden sind geht das ...

zb die abfrage
SELECT * FROM projekte_gu as p join adressen as a on p.kunde=a.id
WHERE p.kunde='1'

gibt die kundeninformation und die aufträge von der kundenid 1 aus
 
jepp ... dat is schon klar ... aber ... *malaushol* ...

in jedem projekt hab ich halt neben dem kunden auch nen lieferanten, nen auftraggeber usw verknüpft - und alle aus der selben adress-tabelle.

neben dem p.kunde hab ich also noch p.lieferant, p.auftraggeber usw ...

und somit hab ich für all diese daten ne unterschiedliche a.id ...
wie kann ich da nun die richtige zuordnen bei:

$kunde = mysql_result($ergebnis, $i, "a.name");
 
nu gut...

auch mal weit aushol :)

so wie es verstanden habe hast du ne projekt tabelle mit kundenid, liferantenid und auftragid

dann muss man natürlich alle idfelder mit der adressid verknüpfen

select * from projekt as p left join adresse as k on p.kunde=k.id left join adresse as l on p.liefer=l.id left join auftrag as a on p.auftrag=a.id
 
goil ... dat funzt :)

ich weiss zwar noch net ganz im detail wie und warum - aba es funzt ... und das is mal die hauptsache

thx a lot :)
 
warum das geht :)

nun gut

tab_a left join tab_b on tab_a.id=tab_b.id

der left join verküpft die beiden tabellen miteinander und in der on angabe wird angegeben welche felder die beiden tabellen verküpfen

durch das wörtchen left bleibt die linke tabelle vollständig und nur die datensätze der rechten tabelle die nicht der bedingung entspechen werden entsorgt

da sql von links nach rechts arbeitet
muss man gedanklich klammern setzen

sprich (((a join b) join c) join d) ist ja die kurzversion

bedeutet erst der join zwischen a und b und das ergebnis wird mit tabelle c verküpft und das ergebnis wieder mit d

hoffe klarer geworden :)
 

Neue Beiträge

Zurück