MySQL-在sql查询中如何按照IN()的结果排序?

发布于 2016-11-15 22:25:01 字数 335 浏览 1345 评论 6

我知道是否有什么方式方法能够按照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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

偏爱自由 2017-08-03 07:30:57

mysql 可以使用FIELD()进行自定义排序
SELECT name, email, ... WHERE uid IN ([uid's from first sql]) order by field(uid,[uid's from first sql])

灵芸 2017-07-05 05:22:23

你要的是这条语句
#second sql
select name,email,... where id in(3,5,4) order by find_in_set(id,'3,5,4');

虐人心 2017-05-20 21:11:11

ORDER BY SUBSTRING_INDEX()也行; 例如

貌似这样更给力

灵芸 2017-05-10 04:30:25

考虑到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的时候直接进行处理,这只是俺以前的处理方法,仅供参考

清晨说ぺ晚安 2017-03-27 08:21:57

直接联表排序不可以吗?还是我没明白你的意思呀

 SELECT b.name, b.email, ... FROM a left join b on a.uid=b.uid WHERE 这里写第一条sql的where判断条件 ORDER BY b.uid

晚风撩人 2017-02-23 16:05:39

我不知道理解对不对啊,你可以先对两个表进行连接,然后去order by 下对应的字段

a为第一个表
b为第二个表
select name, email, ... from a , b where a.uid=b.uid order by b.uid

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文