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,查询将不会返回没有折扣的产品。两个表之间的关系是父子关系。我认为品牌在产品中无处不在。否则使用左外连接