MYSQL 字段权重排序

 这个东西基本思路就是按照需求造个临时表(union),新表里的权重是动态生成的。找了一圈这是最简单粗暴的方式

( SELECT
	(weight_v2 + 10000) AS tmp ,
	yun_hits,
	title,
	weight_v2 
	FROM
		fv_biaozhun 
	WHERE
		( title LIKE '%葡聚糖%' OR st_no LIKE '%葡聚糖%' ) 
		AND `status` = 3 
	ORDER BY
		weight_v2 DESC 
	) UNION ALL
	(
	SELECT
		weight_v2 AS tmp,yun_hits, title,
		weight_v2 
	FROM
		fv_biaozhun 
	WHERE
		( summary LIKE '%葡聚糖%' OR food_note LIKE '%葡聚糖%' OR cosmetics_note LIKE '%葡聚糖%' ) 
		AND `status` = 3 
	ORDER BY
		weight_v2 DESC 
	) 
	ORDER BY tmp DESC,yun_hits DESC

 

### MySQL实现多重排序MySQL 的 `ORDER BY` 子句中,可以通过指定多个字段实现多重排序。当第一个排序字段具有相同值时,数据库会继续按照第二个字段进行排序,依此类推[^2]。 以下是具体实现方法: #### 使用多列排序 假设有一个表名为 `employees`,其中包含以下字段:`salary` 和 `hire_date`。如果希望先按薪水降序排列 (`salary`),再按入职日期升序排列 (`hire_date`),可以编写如下 SQL 语句: ```sql SELECT * FROM employees ORDER BY salary DESC, hire_date ASC; ``` 此查询表示首先根据 `salary` 字段以降序方式排序,对于那些拥有相同薪资的记录,则进一步依据其 `hire_date` 进行升序排序[^1]。 #### 利用表达式或函数作为排序标准 除了简单的字段名称外,在 `ORDER BY` 子句里还可以应用复杂的逻辑运算或者内置函数来进行更精细的数据整理工作。比如下面这个例子展示了怎样基于字符串长度执行降序操作并返回相应数据集[^3]: ```sql SELECT LENGTH(last_name) AS name_length, last_name FROM employees ORDER BY LENGTH(last_name) DESC ; ``` 另外一种情况涉及到了使用 CASE WHEN 构造动态调整某些特定条件下数值大小从而影响最终呈现顺序的情况。例如根据不同部门给予不同权重后再做整体排名处理[^5]: ```sql SELECT *, (CASE department_id WHEN '30' THEN salary*1.1 WHEN '40' THEN salary*1.2 ELSE salary END ) adjusted_salary FROM employees ORDER BY adjusted_salary DESC , employee_id ASC ; -- 可加入更多层级控制 ``` 以上实例说明了通过组合不同的属性以及自定义计算规则能够灵活满足多样化的业务需求场景下的复杂排序要求。 ### 注意事项 - 确保所使用的每一项用于排序的标准都是有效的,并且它们之间存在合理的关联关系以便于理解结果的意义。 - 如果涉及到大量数据的操作可能会影响性能表现因此建议合理设计索引来优化访问路径提升效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值