2 Werte aus einer Tablle die mit JOIN verknüfpft ist

bberger

Grünschnabel
Morgen,

folgende Problemstellung:

Ich habe eine Tabelle namens "products". Des Weiteren habe ich eine Tabelle "companies".

Die Tabelle "products" hat neben vielen jetzt unwichtigen Spalten zwei Spalten mit dem Namen "hersteller" und "distributor" in denen jeweils der Name dessen gespeichert ist (zB "SIEMENS" und "MediaMarkt")

Des Weitern habe ich nun aber auch die Tabelle "companies". In dieser sind Name und Link der jeweiligen Firmen eingespeichert, das heisst sowohl die Firmen die als Hersteller, als auch die Firmen die als Distributor zählen, da sich einige Firmen überschneiden und eine seperate Tabelle nicht viel Sinn macht.

Nun habe ich diese beiden Tabellen mit dem JOIN-Operator verbunden und möchte sowohl für den Hersteller als auch für den Distributor den Link auslesen. Jetzt kommt mein Problem: wie gehe ich das am besten an, dass ich sowohl den Link der ersten als auch den Link der zweiten Firma herausbekomme und weiterverwenden kann?

Aktuell sieht meine Abfrage folgendermaßen aus:

Code:
SELECT productid, hersteller, distributor, company, link
                  FROM products
                        LEFT OUTER JOIN companies
                           ON products.hersteller=companies.company
hersteller, distributor .... VARCHAR
company ..................... VARCHAR
link ............................. VARCHAR

Wie gesagt habe ich gerade keinen Plan, wie ich die Abfrage abändern sollte, damit ich auch den Link für products.distributor bekomme und weiterverwenden kann, ohne extra eine zweite Abfrage durchzuführen.
 
Hallo,
da ich nicht genau weiß, welche Felder du brauchst einfach folgende Idee, welche du ja dann weiter ausbauen kannst:
Code:
SELECT productid, hersteller, distributor, company, link
                  FROM products
                        LEFT OUTER JOIN companies
                           ON products.hersteller=companies.company
UNION
SELECT productid, hersteller, distributor, company, link
                  FROM products
                        LEFT OUTER JOIN companies
                           ON products.distributor=companies.company
 
Naja, ich brauche eigentlich nur den Link ein zweites Mal, den Namen der Firma bekomme ich sowieso aus der ersten Tabelle raus.

Daran zwei SELECT-Abfragen durchzuführen habe ich ja schon gedacht, nur ich möchte es aus bestimmten Gründen nicht so machen. Außerdem (sorry steh heute bisserl auf der Leitung) wie soll ich zwei Identische Variablennamen dann weiter im Code verwenden? Bekomm ich die dann als Array zurück?
 
Zuletzt bearbeitet:
Das ist mir klar!
Was brauchst du:
nur company und zugehörigen link oder
productid, hersteller, distributor, company, link?
Müssen diese Daten in einem Datensatz ausgegeben werden oder dürfen es 2 sein.

Daran zwei SELECT-Abfragen durchzuführen habe ich ja schon gedacht, nur ich möchte es aus bestimmten Gründen nicht so machen. Außerdem (sorry steh heute bisserl auf der Leitung) wie soll ich zwei Identische Variablennamen dann weiter im Code verwenden? Bekomm ich die dann als Array zurück?
Bei dieser Abfrage bekommst du 2 Datensätze, welche sich nur durch die zurückgegebenen beiden letzten Datenfelder (company, link) unterscheiden.
 
Zuletzt bearbeitet:
Ich brauche:

ProdictID
Hersteller (Name)
Distributor (Name)
Hersteller (Link)
Distributor (Link)

und es sollte wenn möglich nur ein Datensatz sein, bzw. eine Abfrage.
 
Die folgende Abfrage sollte die gewünschten Daten mit nur einer Abfrage (genau wie der Vorschlag mit UNION) aber diesmal in einem Datensatz liefern.
Code:
SELECT productid, hersteller, link AS herstellerLink, (
           SELECT distributor, link AS distributorLink
               FROM products
                   LEFT OUTER JOIN companies
                     ON products.distributor=companies.company)
    FROM products
        LEFT OUTER JOIN companies
          ON products.hersteller=companies.company
Hoffe, die Syntax ist OK.

<edit>
die Syntax ist nicht OK - es fehlt die verbindung zwischen den beiden select. Ich weiß aber jetzt nicht wie die ausehen soll.
 
Zuletzt bearbeitet:
Jetzt hab ich einen Error und seh mich grad nicht wirklich raus..
Code:
Operand should contain 1 column(s)

Hier nochmal der ganze Code von mir
Code:
      $abfrage = "SELECT gameid, title, publisher, genre, short, company, link AS publisherLink, (
                     SELECT developer, link AS developerLink
                        FROM ".$_db["local"].".".$_tbl["games"]."
                           LEFT OUTER JOIN ".$_db["local"].".".$_tbl["companies"]."
                              ON ".$_db["local"].".".$_tbl["games"].".publisher=".$_db["local"].".".$_tbl["companies"].".company    
                        )
                        
                  FROM (".$_db["local"].".".$_tbl["games"]."
                        LEFT OUTER JOIN ".$_db["local"].".".$_tbl["companies"]."
                           ON ".$_db["local"].".".$_tbl["games"].".developer=".$_db["local"].".".$_tbl["companies"].".company)
                         
                        LEFT OUTER JOIN ".$_db["local"].".".$_tbl["platforms"]."
                           ON ".$_db["local"].".".$_tbl["games"].".platformid=".$_db["local"].".".$_tbl["platforms"].".platformid
 
Hallo,
habe jetzt deine Tabellen nachgebaut um die Abfrage syntaxfehlerfrei erstellen zu können. Das ist dabei herausgekommen:
Code:
SELECT prodId, herst, distr, link AS herstLink, (
        SELECT link AS distrLink
                FROM prod AS p2
                    LEFT OUTER JOIN comp
                      ON p2.distr=comp.comp
                WHERE p1.prodId = p2.prodId)
    FROM prod AS p1
        LEFT OUTER JOIN comp
          ON p1.herst=comp.comp
    WHERE p1.prodId = 3
 
Zuletzt bearbeitet:
Zurück