2013-08-20 57 views
1

我有一個2表產品和品牌。基於字段從另一個表的MySQL排序列

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

你真的應該在產品表已經brand_id代替brand_name。這樣,如果您更改品牌名稱,則必須在兩個表格中更改它。

對於這一點,數據庫標準化等優點看這個問題: What is Normalisation (or Normalization)?

正因爲如此,讓你可以做價格(具有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 

你可以看到它在這個fiddle

3

恕我直言,你的餐桌產品不正確,因爲你必須使用一個字段來鏈接品牌表的字段brand_id。

另一個建議,折扣恕我直言,我存儲在十進制字段中的符號0.1(表示10%)。

所以,你可以寫與JOIN獲取你的結果,以這種方式查詢(我假設你會改變兩個表之間的參考)

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 
+0

工作有了簡單連接,沒有打折你的查詢將不會返回產品。 –

+0

兩張桌子的關係是親子關係。我認爲品牌是產品中的每一個禮物。否則使用LEFT OUTER JOIN –