mysql - 强制元素在 mysql 查询中的位置

标签 mysql

如何强制元素在 SELECT Mysql 查询结果中的位置? 例如,我有一个包含此数据的“元素”表:

id| name
1 | element1
2 | element2
3 | element3
...
5 | element5

我想手动将 id = 5 的元素放在第二个位置:

id| name
1 | element1
5 | element5
2 | element2
...
3 | element3

通过下面的查询,我可以将元素放在第一位,但不能放在第二或第三位:

SELECT id, IF(id = 5, 1, 0) AS position

FROM元素ORDER BY位置

最佳答案

在不知道其他id的情况下,我可以想到两种方法:

(select * from mytable where id <> 5 limit 1)
union all
select * from mytable where id = 5
union all
(select * from mytable where id <> 5 limit 10000000000000 offset 1)

select *
from mytable
order by id = (select min(id) from mytable where id <> 5) desc,
         id = 5 desc,
         id asc

演示:http://rextester.com/VCVZ23881

更加灵活——你可以把它放在任何位置:

select *
from mytable
order by id <> 5 and id < (select id from mytable where id <> 5 limit 1 offset X) desc,
         id = 5 desc,
         id asc;

X = position - 1

因此,如果您想将行放在 7 位置,则需要将 X 替换为 6

演示:http://rextester.com/DMIXA59318

关于mysql - 强制元素在 mysql 查询中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910150/

相关文章:

php - 无法在 Angular 2 中将数据从表单发布到 mysql

mysql - 无法远程连接到 EC2 MySQL 安装

c# - 如何删除数据 GridView 中的一行并在删除按钮单击事件时更新 MySQL 数据库?

php - 使用 PHP 列出 MySQL 数据库中的所有表

mysql - (async) 使用 sequelize 和 node 在 mysql 数据库中创建多个寄存器

mysql - 当我在 Pagodabox.io 上推送我的 Laravel 应用程序时,迁移没有执行?

mysql - 从单个插入和选择语句插入多行

mysql - 几小时不活动后出现 "MySQL server has gone away"错误

mysql - SELECT 在 mysql 上无效

mysql - 在端口 80 上运行 mamp 时建立数据库连接时出错