MySQL-在sql查询中如何按照IN()的结果排序?
我知道是否有什么方式方法能够按照IN()中结果的顺序排序。
现在有两个简单SQL请求,一个负责查询所有符合条件的IDS,第二条是取这些IDS的详细信息。而且要求第一条语句查询结果IDS放到第二条语句IN()中查询时还能按着IDS的顺序排序。
例如:
#first sql
SELECT uid FROM users WHERE ... ORDER BY points, logins
#second sql
SELECT name, email, ... WHERE uid IN ([uid's from first sql])
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
mysql 可以使用FIELD()进行自定义排序
SELECT name, email, ... WHERE uid IN ([uid's from first sql]) order by field(uid,[uid's from first sql])
你要的是这条语句
#second sql
select name,email,... where id in(3,5,4) order by find_in_set(id,'3,5,4');
ORDER BY SUBSTRING_INDEX()也行; 例如
貌似这样更给力
考虑到order by 对mysql性能的影响,还是在程序里面处理吧
把#first sql的结果存在一个数组里面
$base_uids = array(2,10,4,6,7...);
#second sql
$result = array(0=>array('uid'=>2...),
1=>array('uid'=>4...),
2=>array('uid'=>6...));
$res = array();
foreach($base_uids as $v) {
foreach($result as $row) {
if($v == $row['uid']) {
$res[$v] = $row;
break;
}
}
}
可以在获取$result的时候直接进行处理,这只是俺以前的处理方法,仅供参考
直接联表排序不可以吗?还是我没明白你的意思呀
SELECT b.name, b.email, ... FROM a left join b on a.uid=b.uid WHERE 这里写第一条sql的where判断条件 ORDER BY b.uid
我不知道理解对不对啊,你可以先对两个表进行连接,然后去order by 下对应的字段
如
a为第一个表
b为第二个表
select name, email, ... from a , b where a.uid=b.uid order by b.uid