Mysql按if条件排序

编程入门 行业动态 更新时间:2024-10-27 06:31:04
Mysql按if条件排序 - 错误的顺序(Mysql order by if condition - wrong order)

我有一张简单的桌子:

CREATE TABLE `dev_a4a`.`test` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `type` VARCHAR(45) NOT NULL , `priority` INT NOT NULL , PRIMARY KEY (`id`) );

以下行:

id|type |priority 1 |long |8 2 |long |3 3 |short|9 4 |short|1

我想获得按条件排序的行:

SELECT (RAND() * priority) as prio, type, priority FROM test ORDER BY (IF(type = 'short', '2', prio)) DESC, id DESC

结果我获得了不按if条件排序的行。 每次看起来都是随机的。 这是可能的结果之一:

prio | type | priority '0.05013570194145264', 'long', '8' '2.9015473750434326', 'long', '3' '0.320064320527077', 'short', '1' '7.598900996706356', 'short', '9'

我究竟做错了什么?

预期结果:

prio | type | priority '2.9015473750434326', 'long', '3' <- order by prio '7.598900996706356', 'short', '9' <- order by common value 2 '0.320064320527077', 'short', '1' <- order by common value 2 '0.05013570194145264', 'long', '8' <- order by prio

I got a simple table:

CREATE TABLE `dev_a4a`.`test` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `type` VARCHAR(45) NOT NULL , `priority` INT NOT NULL , PRIMARY KEY (`id`) );

with following rows:

id|type |priority 1 |long |8 2 |long |3 3 |short|9 4 |short|1

I want to get rows ordered by condition:

SELECT (RAND() * priority) as prio, type, priority FROM test ORDER BY (IF(type = 'short', '2', prio)) DESC, id DESC

As a result I got rows not ordered by if condition. Every time it looks like it's random. Here's one of possible results:

prio | type | priority '0.05013570194145264', 'long', '8' '2.9015473750434326', 'long', '3' '0.320064320527077', 'short', '1' '7.598900996706356', 'short', '9'

What am I doing wrong?

Expected result:

prio | type | priority '2.9015473750434326', 'long', '3' <- order by prio '7.598900996706356', 'short', '9' <- order by common value 2 '0.320064320527077', 'short', '1' <- order by common value 2 '0.05013570194145264', 'long', '8' <- order by prio

最满意答案

那这个呢

SELECT (RAND() * priority) as prio, type, priority ,CASE `type` WHEN 'short' THEN 2 WHEN 'long' THEN 1 END AS t FROM test ORDER BY 3 DESC, id DESC

Ok I resolved that issue:

SELECT CASE WHEN type = 'short' THEN 2 ELSE RAND() * priority END AS prio, type, priority FROM test ORDER BY prio DESC, id DESC

更多推荐

本文发布于:2023-07-21 09:27:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1208966.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:条件   Mysql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!