【发布时间】:2014-03-02 13:58:52
【问题描述】:
我的目标是按距离排序结果。
我可以使用 FIELD() 来排序,但是对于 1000 个城市,它看起来并不高效,而且查询变得非常大,此外我必须使用 php 构建查询并运行多个查询。
我没有将“复杂”查询放在这里,而是对其进行了简化。
select a.id from
(select 1 as id union select 2 as id union select 3 as id) a,
(select 2 as id union select 3 as id union select 1 as id) b
where a.id = b.id ;
Result
+----+
| id |
+----+
| 2 |
| 3 |
| 1 |
+----+
我的问题是: 1) 为什么这个查询按 b.id 排序?这实际上是我想要的,但我不明白为什么会这样。
2) 这个查询能不能写得更有效率?
到目前为止我尝试过的方法不起作用:
select a.id from
(select 1 as id union select 2 as id union select 3 as id) a,
(select 2 as id union select 3 as id union select 1 as id) b
order by a.id = b.id desc;
不起作用。结果:
+----+
| id |
+----+
| 1 |
| 3 |
| 1 |
| 2 |
| 2 |
| 3 |
+----+
[编辑删除生产查询]
[编辑另外 2 个示例,我似乎是按 b.id 的选择顺序排序]
select a.id from
(select 1 as id union select 2 as id union select 3 as id) a,
(select 1 as id union select 2 as id union select 3 as id) b
where a.id = b.id;
Result
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
select a.id from
(select 1 as id union select 2 as id union select 3 as id) a,
(select 3 as id union select 2 as id union select 1 as id) b
where a.id = b.id;
Result
+----+
| id |
+----+
| 3 |
| 2 |
| 1 |
+----+
[编辑 4,使用时相同的排序行为:按 a.id IN (b.id) 排序]
select a.id from
(select 1 as id union select 2 as id union select 3 as id) a,
(select 1 as id union select 2 as id union select 3 as id) b
where a.id IN ( b.id );
Result
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
从
中选择a.id
(选择 1 作为 id union 选择 2 作为 id union 选择 3 作为 id) a,
(选择 3 作为 id union 选择 1 作为 id union 选择 2 作为 id) b
其中 a.id IN ( b.id );
Result
+----+
| id |
+----+
| 3 |
| 1 |
| 2 |
+----+
【问题讨论】:
标签: mysql sql-order-by