我有一个MySQL
表,用户按给定的顺序插入行。如果用户随后忘记添加行并在以后插入它,那么它将在已经插入的其他行之后,也就是在执行简单查询时。插入顺序是我想要检索元素的顺序。相关表格是一个简单的表格,解决了与两个ID(recipe_id
和ingredient_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)
有没有一种简单的方法可以达到这个目的?
答案 0 :(得分:1)
正如@ C4ud3x和@Hanno Binder指出的那样,无法保证MySQL
以与插入时相同的顺序返回数据。通常,情况就是这样,但它不是一种处理数据排序的可靠方法。因此,我通过添加列order_id
来解决问题,以便能够使用ORDER BY
子句来确保订单得到正确维护。
我在dba.stackexchange.com找到了一个相关问题的答案。接受答案的要点是:
另一方面,如果您打算依赖此订单执行任何操作,则必须使用ORDER BY
指定所需的订单。 做任何事情都是为了让自己陷入不受欢迎的惊喜。