1

私は2つのテーブル製品とブランドを持っています.

Products    

+------------+-------------------------------------+------------+-------+
| product_id | title                               | brand_name | price |
+------------+-------------------------------------+------------+-------+               
| 1          | Pacific Evolution 26" Mountain Bike | Pacific    | 100   |
+------------+-------------------------------------+------------+-------+
| 2          | Schwinn Riverside Cruiser           | Schwinn    | 200   |
+------------+-------------------------------------+------------+-------+                   

Brands
+-----------+-------------+----------+
| brand_id  | brand_name  | discount |
+-----------+-------------+----------+
| 22        | Schwinn     | 10       |
+-----------+-------------+----------+

ブランドに割引がある場合、製品の価格は変わります。(私の表の例では、Schwinn ブランドは 10% 割引です)

私の場合、価格の昇順で製品のリストを出力するにはどうすればよいですか?

4

2 に答える 2

4

brand_name の代わりに、products テーブルに brand_id が必要です。この方法でブランド名を変更すると、両方のテーブルで変更する必要があります。

データベース正規化のこれおよびその他の利点については、次の質問を参照してください: 正規化 (または正規化) とは何ですか?

そのまま、できる価格を取得するには (brand_id がある場合は、brand_name の代わりにそれで結合します):

SELECT p.product_id, 
       p.title, 
       p.brand_name, 
       p.price,
      (p.price*(1-ifnull(b.discount,0) * 0.01)) AS discounted_price
FROM products p
LEFT JOIN brands b
    ON p.brand_name = b.brand_name
ORDER BY discounted_price ASC

あなたはそれがこのフィドルで働いているのを見ることができます

于 2013-08-20T16:14:12.897 に答える
3

私見あなたのテーブルPRODUCTSは正しくありません。フィールドを使用して、ブランドテーブルのフィールドbrand_idをリンクする必要があるためです。

別のアドバイス、割引の私見フィールド 0.1 表記 (10% を表す) で 10 進数フィールドに格納しました。

したがって、この方法で JOIN を使用してクエリを作成し、結果を取得できます (2 つのテーブル間の参照を変更すると仮定します)。

SELECT p.product_id, p.title, b.brand_name, p.price,
(p.price * (1 - b.discount * 0.01)) as discounted_price
FROM products p
JOIN brands b
on p.brand_id = b.brand_id
order by (p.price * (1 - b.discount * 0.01)) asc
于 2013-08-20T15:47:30.343 に答える