Abfrage über zwei Tabellen

milchkuh74

Grünschnabel
Hallo,

ich bin leider völliger MySqL Laie und habe daher kaum Hintergrundwissen. Ich habe folgendes Problem. Ich muss aus Tabelle1 Firmenbranchen von Unternehmen abfragen, diese sind mit den Feldern bid1 bis bid3 hinterlegt und enthalten die Branchennummern. Die Branchennummern sind in einer extra Tabelle2 hinterlegt. Dort ist auch der entpsrechende Name der Branche angegeben.

Nun sollte ich für die Ausgabe die Branchen-ID in der Tabelle1 mit den Branchennamen aus Tabelle2 verknüpfen. Kann mir hier jemand weiterhelfen?

Danke jetzt schon.
 
Mhhh ich weis nicht ob ich das jetzt richtig verstanden habe aber:

Code:
SELECT Tabelle1.Unternehmen, Tabelle2.Branche FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.bid = Tabelle2.idb;

Oder so ähnlich ?
 
Danke für die Antwort, ich denk es geht in die Richtung. Habe mal die bisherige Lösung gepostet. Die bring allerdings die DB ins Schwitzen und bricht nach ~ 35000 Datensätzen ab wenn Sie in einer Schleife über alle Firmeneinträge ausgeführt wird.

// Firma
$firmen_details = mysql_query("SELECT * FROM $tab_firmen WHERE id = '$get'") or die(mysql_error());
$row_firmen_details = mysql_fetch_object($firmen_details) or die(mysql_error());;

if ($row_firmen_details->fbranche1 != '') {
$branche1 = mysql_query("SELECT * FROM $tab_branchen WHERE branche = '$row_firmen_details->fbranche1'");
$row_branche1 = mysql_fetch_object($branche1);
$bid1 = $row_branche1->id;
}

if ($row_firmen_details->fbranche2 != '') {
$branche2 = mysql_query("SELECT * FROM $tab_branchen WHERE branche = '$row_firmen_details->fbranche2'");
$row_branche2 = mysql_fetch_object($branche2);
$bid2 = $row_branche2->id;
}

if ($row_firmen_details->fbranche3 != '') {
$branche3 = mysql_query("SELECT * FROM $tab_branchen WHERE branche = '$row_firmen_details->fbranche3'");
$row_branche3 = mysql_fetch_object($branche3);
$bid3 = $row_branche3->id;
}
 
Hmm ja das ganze ist natürlich in der Form sehr unperformant, kannst du vielleicht 2 screens der Tabellen hochladen und mit ganau sagen was du willst.
Das wäre um einiges einfacher ;)
 
Ok, dann werd ich das mal versuchen zu Formulieren :) Ich hasse Urlaubsvertretungen, wenn man Aufgaben bekommt von denen man keine Ahnung hat...

Also die Tabelle mit den Firmen enthält komplett alle Unternehmensdaten. Bei Klick auf entsprechende Firma kommt eine Übersicht dieser Daten.
Hier wird nun die Branche 1 - 3 ausgeben. Die Ausgabe der Branchen erfolgt derzeit als Nummer - Also z.B.
Branche 1 = 487
Branche 2 = 13
Branche 3 = 1571

und nicht als Name der Branche.

Die Namen der Branchen sind in einer Tabelle hinterlegt, die eben diese Namen enthält.
Also z.B:
487 = Agentur
13 = Maschinenbau
1571 = Drehtechnik

Also sollte bei der Ausgabe anstatt der Nummer der Name stehen. z.B.
Branche 1 = Agentur
Branche 2 = Maschinenbau
Branche 3 = Drehtechnik

Hoffe ich habe das jetzt Verständlich geschrieben.

Zu den Screenshots:
Ich habe mal eine alte Tabelle genommen wo sowohl der Branchenname (fbranche 1-3) enthalten war und zusätzlich die ID Der Branche. In der neuen Tabelle sind die Felder fbranche1 bis fbranche3 aus Preformancegründen nicht enthalten.
 

Anhänge

  • 001.jpg
    001.jpg
    70,7 KB · Aufrufe: 24
So ich weis nicht mehr genau ob das mit mehreren joins genau so funktioniert aber wens nicht geht schreibste einfahch nochmal.

Code:
SELECT NameUnternemen, AllesAndereHalt, Branchen.Branche FROM Firmen LEFT JOIN
Branchen ON(Firmen.bid1 = Branchen.id) AND(Firmen.bid2 = Branchen.id) AND (Firmen.bid3 = Branchen.id);

Ka ob das so geht mit den AND usw ... habs schon länger nicht mehr gemacht aber versuchs einfach mal.
 
Also ich habe ds mal angepasst:

$firma = mysql_query("SELECT fname, bid1, $tab_branchen.branche FROM $tab_firmen LEFT JOIN
$tab_branchen ON ($tab_firmen.bid1 = $tab_branchen.id) AND ($tab_firmen.bid2 = $tab_branchen.id) AND ($tab_firmen.bid3 = $tab_branchen.id)") or die(mysql_error());

Scheint zu gehen, zumindest bekomme ich mit $row_firma->fname den firmenname angezeigt.

Nur weiß ich jetzt nicht wie ich den Namen der Branche ausgeben kann? Muss da nicht noch was mit "... AS branche1 " rein?
 
Hallo milchkuh74,

ich fasse mal "kurz" zusammen:
Du hast eine Tabelle mit Firmen, denen jeweils bis zu 3 Branchen-ID's zugeortnet sind.
Die Branchen stehen in einer seperaten Tabelle.

In diesem Beispiel
http://www.tutorials.de/forum/relat...ds-auf-die-gleiche-fremdtabelle-zugreift.html
sind es zwar nur 2 Fremdschlüssel aus einer Tabelle und es gibt immer einen Wert, aber sonst passt es auf dein Probelm. Daher brauchst du bei deiem SQL kein INNER JOIN, sondern ein LEFT JOIN und du musst 3x auf die Branche joinen.
 
Ja du kannst noch ein AS setzen:

$firma = mysql_query("SELECT fname, bid1, $tab_branchen.branche AS branche FROM $tab_firmen LEFT JOIN
$tab_branchen ON ($tab_firmen.bid1 = $tab_branchen.id) AND ($tab_firmen.bid2 = $tab_branchen.id) AND ($tab_firmen.bid3 = $tab_branchen.id)") or die(mysql_error());

Nur weis ich jetzt gerade nicht wie du das genau auslesen kannst, da branche ja jetzt 3 verschiedene Werte hat.

Ich sehe gerade(wieso auch erst jetzt?^^), dass das so sehr warscheinlich nicht wirklich optimal ist, da du eine m zu m Beziehung hast.

Wenn ein Unternehmen mehrere Branchen haben kann und eine Branche mehrere Unternehmen, musst du eine Zwischentabelle machen.
Dann wird es basser funktionieren.
Du musst also eine Tabelle mit z.B dem Namen "unt_bra" anlegen, in welcher du die jeweiligen ids miteinander verknüpfst.

id | uid | bid|

Nun kannst du je ein Unternehmen mit einer Branche verknüpfen und dies beliebig oft.
 

Neue Beiträge

Zurück