mysql按字段排序(有一个扭曲)

标签 mysql sql-order-by

我有一个产品表,其中包含产品名称、两个产品属性字段和一个价格字段。

问题是我无法更改数据库的结构方式。每个属性字段都是等效的,可以使用任何一个。

基本上:

 NAME      | ATTRIBUTE_1 | ATTRIBUTE_2 | PRICE
 Tshirt    | red         | small       | 25
 Tshirt    | medium      | red         | 20
 Tshirt    | blue        | medium      | 30
 Tshirt    | blue        | large       | 16

不是最好的设置,但就是这样......

我想做一个将执行以下操作的查询:

首先展示所有的蓝色T恤并按价格排序 显示之后按价格排序的所有其他 T 恤

我在考虑按字段排序之类的东西,但由于颜色可以在属性 1 或 2 中,因此这些字段需要是等效的。

有什么建议吗?

最佳答案

SELECT NAME, ATTRIBUTE_1, ATTRIBUTE_2, PRICE
FROM products
ORDER BY (ATTRIBUTE_1 = 'blue' OR ATTRIBUTE_2 = 'blue') DESC, PRICE

(ATTRIBUTE_1 = 'blue' OR ATTRIBUTE_2 = 'blue') 如果为真则为 1,如果为假则为 0,因此排序以降序排列将首先对具有蓝色属性值的行进行排序。

关于mysql按字段排序(有一个扭曲),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3514338/

相关文章:

mysql - 想要仅根据列值消除重复记录

postgresql - 如果我使用另一个 ORDER BY,为什么 postgres 不再使用索引?

mysql order by select——可能吗?

mysql - 精确匹配 UTF-8 上的 mysql 查询?

PHP - PDO 参数编号无效

sql - 在 Postgresql 中排序以对 IP 地址进行排序?

sql - 为什么添加 ORDER BY 会大大加快查询速度?

MySQL Ordering a query - 进一步的问题

mysql - 如何使用 Wordpress UpdraftPlus 修复 MySql 数据库恢复错误 : Error Code: 1067. 'user_registered' 的默认值无效

php - 如何在 MySQL 中按日期选择排名靠前的人