12

私はいくつかのテーブルを結合しようとしています。レイアウトの例を以下に示します。

注文

user_id=7 pricing id=37

products_pricing

id=37 product_id=33

製品

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' ");

リスト

id=233 user_id=7 url=test.com

このSQLを使用すると、7のuser_idからすべての製品を提供する出力が得られ、whileループで各製品名が一覧表示されます。ただし、user_id列を持つlistingsというテーブルに別のINNER JOINを追加すると、一致する各行のURLを取得して、製品名をURLにハイパーリンクできるようにする必要があります。これにより、listingsテーブルに含まれるすべてのものも取得されます。上記の作業内容として。私はそれを非常に間違っているか、何かが欠けています。私はそれを理解しようと数時間を費やしましたが、同じ結果を得続けています。誰かが私を助けることができますか?

4

2 に答える 2

26

これを試して:

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 フィドルのデモ

質問に投稿したサンプル データについては、次のようになります。

| ID |        NAME |      URL | USER_ID | PRICING_ID |
------------------------------------------------------
| 33 | testproduct | test.com |       7 |         37 |
于 2013-02-03T14:14:22.833 に答える
2

はい、これは INNER 結合自体を使用して実行できます。選択ステートメントで選択列をフェッチします。

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';
于 2013-02-03T14:33:03.780 に答える