全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 2994|回复: 10
打印 上一主题 下一主题

调用最后60条记录,然后随机排序

[复制链接]
跳转到指定楼层
1#
发表于 2011-2-20 00:10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
2#
发表于 2011-2-20 00:11:35 | 只看该作者
这样是调用随机的60条

正确的方法我也不懂

大概方法是,按正常顺序调用最后的60条,返回数组,再把这个数组的顺序打乱

[ 本帖最后由 gdtv 于 2011-2-20 00:12 编辑 ]

评分

参与人数 1威望 +10 收起 理由
张生 + 10 谢谢,我继续研究

查看全部评分

3#
发表于 2011-2-20 00:22:07 | 只看该作者
要用子查询

select  *  from (select * from table_name order by PK desc limit 0,60) tmp_table order by rand()

但是性能不是最好

select * from table_name order by PK desc limit 0,60获取数据,然后用程序shuffle列表相对好一点

评分

参与人数 2威望 +30 收起 理由
我是人 + 15 支持原创内容!
tony1999 + 15 以后不会的语句可以问你了,哈哈 ...

查看全部评分

4#
发表于 2011-2-20 00:31:24 | 只看该作者
不会技术的路过...
5#
发表于 2011-2-20 03:06:56 | 只看该作者
select * from news order by rand() desc limit 60
6#
发表于 2011-2-20 03:22:13 | 只看该作者
原帖由 zllovesuki 于 2011-2-20 03:06 发表
select * from news order by rand() desc limit 60

嗯,倒序加上了,然后应该limit应该规定开始位置,从第0条记录开始的吧?
  1. select * from news order by rand() desc limit 0,60
复制代码
7#
发表于 2011-2-20 04:16:28 | 只看该作者
原来这里还可以问这些问题的
看来下次有地方发问了
8#
 楼主| 发表于 2011-2-20 20:56:41 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
9#
发表于 2011-2-20 21:05:18 | 只看该作者
原帖由 张生 于 2011-2-20 20:56 发表


这条代码我用在ECMS上面的,如果按照这种写法,每次生成一个页面要消耗2~5秒


这是全部记录打乱之后取倒序60条,不是倒序取60条然后打乱, mysql全部记录order by rand效率肯定低的,你真的要实现这个,可以搜下order by rand mysql 效率这几个关键词,有人写过存储过程版,子查询版,表连接版的替代优化方式的

评分

参与人数 1威望 +10 收起 理由
张生 + 10 太高深了,无法理解

查看全部评分

10#
发表于 2011-2-21 07:41:32 | 只看该作者
rand() 非常慢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-10-25 22:09 , Processed in 0.086786 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表