我有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%的折扣)
如何输出产品列表 在我的情况下按价格升序?
答案 0 :(得分:4)
你真的应该在products表中使用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
中看到它正常工作答案 1 :(得分: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