次のようなテーブルがあるとします。
+----+--------------+-------+----------------+------------+
| id | product_name | price | bulk_reference | bulk_count |
+----+--------------+-------+----------------+------------+
| 1 | xxxx | 11.99 | 0 | 0 |
+----+--------------+-------+----------------+------------+
| 2 | zzzz | 22.99 | 0 | 0 |
+----+--------------+-------+----------------+------------+
| 3 | | | 2 | 10 |
+----+--------------+-------+----------------+------------+
すべての商品などを選択できます。問題ありません。ただし、すべての製品を返す必要がありますが、行 WHERE bulk_reference > 0 は、行で設定されていない参照された行の値を返す必要があります...同じ結果セットで。
特定のフィールドでそれを行う必要があります。product_name
それでは、ID 3のフィールドを選択したいとしましょう。フィールドが 2 に設定されているため、返さzzzz
れるbulk_reference
はずなので、行 ID=2 から値を取得する必要があります。
MySQL のみでこれを行うにはどうすればよいですか?
======================================
アップデート:
これまでに投稿されたすべての回答で、エラーメッセージ #1054 が表示されますUnknown column 'p.bulk_reference' in 'field list'.
。なぜこれが起こるのかわかりません...
これは、投稿された回答の1つを適応させたものです。
SELECT p.id ,
IF(p.bulk_reference>0,r.sales_price,p.sales_price) AS sales_price
, p.bulk_reference
, p.bulk_count
FROM products_attribs_cz p
LEFT JOIN products_attribs_cz r ON r.id = p.bulk_reference
AND p.bulk_reference > 0
WHERE p.id=166;
ただし、私が試した解決策が何であれ、常にエラーが発生します...
ID はこのテーブル内で一意です。選択されているフィールドが変化し、動的に生成されます。結果は常に 1 つだけです。いくつかではありません。私は常に一意の行を選択していますが、これは製品のバルク パッケージです。たとえば、行 ID=1 & product_name=BlackBerry に BlackBerry 電話があります。しかし、別の行 (ID=2) には同じ電話のバルク パッケージがあるので、ID=2 & product_name=blank & bulk_reference=1 です。バルク パッケージのみの同じ製品であるため、bulk_referenced 行から製品の名前を返す必要があります。
(卸売業者は大量注文で割引を受けるという考えです。したがって、1台の電話を注文すると通常の価格になり、10台の電話を大量に注文すると20%オフになります)