wake-up-neo.com

MySQL Inner Join-Abfrage für mehrere Tabellen

Ich versuche ein paar Tabellen zusammenzustellen und Beispiele für die Layouts finden Sie unten:

aufträge

user_id=7 pricing id=37

products_pricing

id=37 product_id=33

produkte 

id=33 name=test product

SQL

SELECT *
FROM orders
  INNER JOIN products_pricing
    ON orders.pricing_id = products_pricing.id
  INNER JOIN products
    ON products_pricing.product_id = products.id
WHERE orders.user_id = '7' ");

auflistungen

id=233 user_id=7 url=test.com

Mit dieser SQL bekomme ich eine Ausgabe, die mir alle Produkte aus der user_id von 7 gibt, und es wird jeder Produktname in einer while-Schleife aufgelistet. Wenn ich jedoch einen weiteren INNER JOIN für eine Tabelle namens "Listings" hinzufüge, die eine user_id-Spalte enthält, und ich eine URL für jede Zeile suchen muss, die übereinstimmt, damit ich die Produktnamen mit der URL verknüpfen kann, bekomme ich auch alles, was in der Listentabelle enthalten ist wie das Arbeitsmaterial oben. Ich mache es entweder sehr falsch oder vermisse etwas. Ich habe ein paar Stunden damit verbracht, es herauszufinden, bekomme aber immer das gleiche Ergebnis. Kann mir jemand helfen?

11
Daniel

Versuche dies:

SELECT 
  p.id,
  p.name,
  l.url,
  o.user_id,
  o.pricing_id
FROM orders AS o
INNER JOIN products_pricing AS pp ON o.pricing_id  = pp.id
INNER JOIN products         AS  p ON pp.product_id = p.id
INNER JOIN listings         AS  l ON l.user_id = o.user_id
WHERE o.user_id ='7' 
  AND l.id = 233 
  AND l.url = 'test.com';

SQL Fiddle Demo

Für die Beispieldaten, die Sie in Ihrer Frage gepostet haben, erhalten Sie folgende Informationen:

| ID |        NAME |      URL | USER_ID | PRICING_ID |
------------------------------------------------------
| 33 | testproduct | test.com |       7 |         37 |
21
Mahmoud Gamal

Ja, dies kann über den INNER-Join selbst ausgeführt werden. In der select-Anweisung wird die select-Spalte abgerufen.

SELECT 
  p.id,
  p.name,
  l.url,
  o.user_id,
  o.pricing_id
FROM orders AS o
INNER JOIN products_pricing AS pp ON o.pricing_id  = pp.id
INNER JOIN products         AS  p ON pp.product_id = p.id
INNER JOIN listings         AS  l ON l.user_id = o.user_id
WHERE o.user_id ='7' 
  AND l.id = 233 
  AND l.url = 'test.com';
0
user2001117