重新排序MySQL行:移动行"向上"

时间:2015-08-07 10:29:07

标签: mysql

我有一个MySQL表,用户按给定的顺序插入行。如果用户随后忘记添加行并在以后插入它,那么它将在已经插入的其他行之后,也就是在执行简单查询时。插入顺序是我想要检索元素的顺序。相关表格是一个简单的表格,解决了与两个ID(recipe_idingredient_id)的多对多关系。

mysql> select * from ingredient_in_recipe where recipe_id = 7;
+-----------+---------------+------+----------+------------+
| recipe_id | ingredient_id | unit | quantity | group_name |
+-----------+---------------+------+----------+------------+
|         7 |            71 | g    |   300.00 | NULL       |
|         7 |            34 | stk  |     3.00 | NULL       |
|         7 |            72 | stk  |     1.00 | NULL       |
|         7 |            73 | stk  |     0.50 | NULL       |
|         7 |            45 | stk  |     6.00 | NULL       |
|         7 |            74 | stk  |     0.50 | NULL       |
|         7 |            23 | g    |    15.00 | NULL       |
|         7 |            78 | ts   |     2.00 | NULL       |
|         7 |            75 | ts   |     3.00 | NULL       | <--- This is where I want the last element to be.
|         7 |            76 | ss   |     1.00 | NULL       |
|         7 |            77 | stk  |     1.00 | NULL       |
|         7 |            79 | g    |   195.00 | NULL       |
|         7 |            38 | ss   |     5.00 | NULL       | <--- This is inserted later. Should be "higher up".
+-----------+---------------+------+----------+------------+
13 rows in set (0.00 sec)

有没有一种简单的方法可以达到这个目的?

1 个答案:

答案 0 :(得分:1)

正如@ C4ud3x和@Hanno Binder指出的那样,无法保证MySQL以与插入时相同的顺序返回数据。通常,情况就是这样,但它不是一种处理数据排序的可靠方法。因此,我通过添加列order_id来解决问题,以便能够使用ORDER BY子句来确保订单得到正确维护。

我在dba.stackexchange.com找到了一个相关问题的答案。接受答案的要点是:

另一方面,如果您打算依赖此订单执行任何操作,则必须使用ORDER BY指定所需的订单。 做任何事情都是为了让自己陷入不受欢迎的惊喜。