在mysql中,是否可以使用预定义的列值(ID)集(如: order by (ID=1,5,4,3) )按"order by“进行排序,这样我就可以按该顺序得到记录1、5、4、3?
更新:关于滥用mysql的 ;-)我必须解释为什么我需要这个...
我希望我的记录每5分钟随机改变一次排序。我有一个cron任务来执行更新表,以将不同的随机排序顺序放入其中。只有一个问题!分页。我会有一个访问者来我的页面,我给他前20个结果。他将等待6分钟,然后转到第2页,他将得到错误的结果,因为排序顺序已经改变。
所以我想,如果他来我的网站,我会把所有的ID放到一个会话中,当他在第2页时,他会得到正确的记录,即使排序已经改变了。
有没有其他更好的方法来做到这一点?
发布于 2011-11-30 16:16:28
可以使用ORDER BY和FIELD函数。请参阅http://lists.mysql.com/mysql/209784
SELECT * FROM table ORDER BY FIELD(ID,1,5,4,3)使用Field()函数,文档中提到,返回str在str1,str2,str3,...列表中的索引(位置),如果没有找到则返回0。实际上,您可以根据此函数的返回值对结果集进行排序,该返回值是给定集合中字段值的索引。
发布于 2011-11-30 16:13:43
您应该能够使用CASE来执行以下操作:
ORDER BY CASE id
WHEN 1 THEN 1
WHEN 5 THEN 2
WHEN 4 THEN 3
WHEN 3 THEN 4
ELSE 5
END发布于 2011-11-30 16:15:17
在mysql的有关ORDER BY的官方文档中,有人发表了一篇文章,说你可以使用FIELD来解决这个问题,比如:
SELECT * FROM table ORDER BY FIELD(id,1,5,4,3)这是未经测试的代码,理论上应该可以工作。
https://stackoverflow.com/questions/8322849
复制相似问题