我的表是这样的:
+------------------------+
| id | title | position |
+------------------------+
| 1 | test 2 | 3 |
+------------------------+
| 2 | test 3 | 1 |
+------------------------+
| 3 | test 1 | 0 |
+------------------------+
我发现了这个查询,它根据保存前一个id的位置字段检索排序的行。
SELECT
*
FROM
mytable AS t1
LEFT JOIN
mytable AS t2
ON t2.position = t1.id
我想知道为什么这是工作,因为没有顺序子句和数据库不应该知道位置0是开始的行
结果取决于将行插入表的顺序。例如,如果在插入id=2的行之前插入id=3的行,那么您将得到一个非排序的结果。
现在,你从t1中取出数据的顺序是id
因为这是你把元素放入表的顺序
http://sqlfiddle.com/见!2/63a925/2,自己试试。
注意:数据库不能保证像您所说的那样工作,只是大多数数据库都是这样工作的。您应该而不是依赖于此行为,因为模式或查询的一个小更改可能会毁掉您的一整天!还要注意,如果id
是一个(主?)键,那么数据库将按照索引的顺序拉出行,这可能会覆盖插入顺序。
根据表1中等于表2中位置的ID加入表2。由于表1中的id是连续的,因此输出看起来是按