免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1908 | 回复: 7
打印 上一主题 下一主题

查询记录排序问题求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-04 13:19 |只看该作者 |倒序浏览
从外部得道一个数据,是个有序数组
$arr = array(2,5,6,1,3,9);
里面的数据是tablea里的id

tablea id,name......

$sql = 'select * from table where id in ('.implode(',',$arr).')';
即$sql = 'select * from table where id in (2,5,6,1,3,9);

这样得到6条记录,正确,但顺序是按id的1,2,3,5,6,9排序的。
我想让得到的6条记录,顺序也是2,5,6,1,3,9 就是外部数据的id顺序。 怎么才能在一条或者多条sql语句里实现呢?

我现在的做法是,循环按照$arr的顺序,再次排序下得出的结果。

求高人解决啊,谢谢了。

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
2 [报告]
发表于 2009-12-04 14:38 |只看该作者
select * from table where id in (2,5,6,1,3,9) order by field(id,2,5,6,1,3,9);

论坛徽章:
0
3 [报告]
发表于 2009-12-04 16:12 |只看该作者
谢谢 cenalulu,非常感谢。
我试过,用order by find_in_set(id,'2,5,6,1,3,9') 也行。有啥差别没?
不过貌似效率就差了老多,用到了Using filesort,还能优化下么?

您觉得用mysql实现排序还是自己在php里手动排序,做个循环好呢?
我很想知道mysql执行扫描的具体顺序是什么,就是mysql的调试,现在只会用explain,有其他方法么?

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
4 [报告]
发表于 2009-12-04 16:41 |只看该作者
效率到还真没测过,数据不多的话就直接mysql做,mysql做效率低的话就放php里做吧。

论坛徽章:
0
5 [报告]
发表于 2009-12-04 19:02 |只看该作者
select * from table where id =5
union all
select * from table where id =3
union all
....


这样类似吧。不过这样写有点烦。效率应该还行

论坛徽章:
0
6 [报告]
发表于 2009-12-04 22:43 |只看该作者
建议这类应用放到PHP处理吧。别在DB里处理。以免后期业务增长后,还要改程序。

论坛徽章:
0
7 [报告]
发表于 2009-12-04 22:48 |只看该作者
原帖由 Coolriver 于 2009-12-4 22:43 发表
建议这类应用放到PHP处理吧。别在DB里处理。以免后期业务增长后,还要改程序。

这样的确很麻烦,效率我还真不知道。
做多次查询,和一次做多个查询,到底那个效率高?
没有大量的数据,我还真没法测试。

论坛徽章:
0
8 [报告]
发表于 2009-12-04 22:48 |只看该作者
原帖由 fengyizi 于 2009-12-4 22:48 发表

这样的确很麻烦,效率我还真不知道。
做多次查询,和一次做多个查询,到底那个效率高?
没有大量的数据,我还真没法测试。

原帖由 justin033 于 2009-12-4 19:02 发表
select * from table where id =5
union all
select * from table where id =3
union all
....


这样类似吧。不过这样写有点烦。效率应该还行


谢谢二位的建议。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP