mysql根据另一个表中的字段对列进行排序
我有两个表产品和品牌mysql根据另一个表中的字段对列进行排序,mysql,sql,Mysql,Sql,我有两个表产品和品牌 Products +------------+-------------------------------------+------------+-------+ | product_id | title | brand_name | price | +------------+-------------------------------------+------------+-------+
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%的折扣
如何在中输出产品列表
在我的情况下,按价格升序 IMHO您的表产品不正确,因为您必须使用字段链接brands表的字段brand\u id 另一个建议是,IMHO字段中的折扣I存储在十进制字段中,以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
IMHO您的表产品不正确,因为您必须使用字段链接brands表的字段brand_id 另一个建议是,IMHO字段中的折扣I存储在十进制字段中,以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
您确实应该在产品表中显示品牌id,而不是品牌名称。这样,如果您更改了品牌名称,则必须在两个表中都更改它 有关数据库规范化的这一点和其他优点,请参见以下问题: 事实上,要获得品牌id所能提供的价格,您可以通过品牌id而不是品牌名称加入:
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
您可以看到它在这个中起作用。您真的应该在产品表中使用brand\u id,而不是brand\u name。这样,如果您更改了品牌名称,则必须在两个表中都更改它 有关数据库规范化的这一点和其他优点,请参见以下问题: 事实上,要获得品牌id所能提供的价格,您可以通过品牌id而不是品牌名称加入:
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
您可以看到它在这个中工作,使用简单联接,您的查询将不会返回没有折扣的产品。两个表之间的关系是父子关系。我认为品牌在产品中无处不在。否则使用LEFT-OUTER-join和simple-join,查询将不会返回没有折扣的产品。两个表之间的关系是父子关系。我认为品牌在产品中无处不在。否则使用左外连接