首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql按特定ID值排序

Mysql按特定ID值排序
EN

Stack Overflow用户
提问于 2011-11-30 16:09:37
回答 8查看 97.7K关注 0票数 114

在mysql中,是否可以使用预定义的列值(ID)集(如: order by (ID=1,5,4,3) )按"order by“进行排序,这样我就可以按该顺序得到记录1、5、4、3?

更新:关于滥用mysql的 ;-)我必须解释为什么我需要这个...

我希望我的记录每5分钟随机改变一次排序。我有一个cron任务来执行更新表,以将不同的随机排序顺序放入其中。只有一个问题!分页。我会有一个访问者来我的页面,我给他前20个结果。他将等待6分钟,然后转到第2页,他将得到错误的结果,因为排序顺序已经改变。

所以我想,如果他来我的网站,我会把所有的ID放到一个会话中,当他在第2页时,他会得到正确的记录,即使排序已经改变了。

有没有其他更好的方法来做到这一点?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-11-30 16:16:28

可以使用ORDER BY和FIELD函数。请参阅http://lists.mysql.com/mysql/209784

代码语言:javascript
复制
SELECT * FROM table ORDER BY FIELD(ID,1,5,4,3)

使用Field()函数,文档中提到,返回str在str1,str2,str3,...列表中的索引(位置),如果没有找到则返回0。实际上,您可以根据此函数的返回值对结果集进行排序,该返回值是给定集合中字段值的索引。

票数 227
EN

Stack Overflow用户

发布于 2011-11-30 16:13:43

您应该能够使用CASE来执行以下操作:

代码语言:javascript
复制
ORDER BY CASE id
  WHEN 1 THEN 1
  WHEN 5 THEN 2
  WHEN 4 THEN 3
  WHEN 3 THEN 4
  ELSE 5
END
票数 35
EN

Stack Overflow用户

发布于 2011-11-30 16:15:17

在mysql的有关ORDER BY的官方文档中,有人发表了一篇文章,说你可以使用FIELD来解决这个问题,比如:

代码语言:javascript
复制
SELECT * FROM table ORDER BY FIELD(id,1,5,4,3)

这是未经测试的代码,理论上应该可以工作。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8322849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档