为什么 in 子查询排序没有用呢?

SELECT * FROM cmf_picture WHERE id in (
SELECT object_id FROM cmf_term_relationships mt WHERE mt.term_id = $term_id AND mt.status = 1 ORDER BY listorder DESC )
                  

为什么子查询根据listorder降序排序没有起到排序作用呢?

阅读 3.9k
3 个回答

不用子查询 联查就可以了

SELECT a.* FROM cmf_picture a join cmf_term_relationships mt on a.id=mt.object_id WHERE mt.term_id = $term_id AND mt.status = 1 ORDER BY mt.listorder DESC;

select * from table order by col desc
这个order by 排序的是对于的 table表查询的结果集
如果你想要排序cmf_picture的结果,语法上肯定要写在外面的查询啊,子查询里面的排序是对子查询进行排序,对外面的查询结果排序并不影响。
还有子查询一般用于非关联查询,如果你这两个表是可以关联的,也可以使用关联查询

你子查询不管排不排序查出来的就是一堆id, 对于外面的查询条件就是in一堆id, 当然你子查询不管排不排序对外面的查询是没有用的