MySQL - 每个用户的自定义顺序

MySQL - Custom order for every users

我想让我的用户制作一车水果,但也允许他们以他们想要的方式订购。 我会尽量用最简单的方式解释我的问题。

一个 table "user" 包含具有自动递增 id 字段的用户。

-----------------
| id | username |
-----------------

我有一个table"fruits"里面有水果

--------------
| id | fruit |
--------------

而且我想让用户拥有一个装有水果的购物车,所以我创建了 table "cart" :

---------------------------
| id | user_id | fruit_id |
---------------------------

例如,

我有 "fruits" :

--------------
| 1 | Banana |
| 2 | Apple  |
| 3 | Orange |
--------------

如果用户 1 想要一个,我会在 "cart"

---------------------------
| id | user_id | fruit_id |
---------------------------
| 1  |    1    |     1    |
| 2  |    1    |     2    |
| 3  |    1    |     3    |
---------------------------

所以如果我执行:

SELECT fruit_id FROM cart WHERE user_id = 1;

我会:

------------
| fruit_id |
------------
|     1    |
|     2    |
|     3    |   
------------

但我想让我的用户通过 jQuery Sortable 数组重新排列购物车,以便 MySQL 为他排序。

我想到了一个似乎不是最佳方法的解决方案;用 user_id 和 fruit_id 的字符串重新制作 "cart" table 我需要解析。

第二种方法是删除条目并按正确顺序重新输入它们,以便按 id 排序对它们进行排序,但我对这种情况也不太满意。

您知道 better/cleaner 这样做的方法吗?

非常感谢任何insight/comment/knowledge。

SQL table代表无序集合。同样,除非您使用 ORDER BY.

,否则结果集是 无序的

你似乎有两个选择。在 table 中添加一列,如 Juergen 在评论中建议的那样说 sort_order

或者,在查询中进行排序:

SELECT fruit_id
FROM cart
WHERE user_id = 1
ORDER BY FIELD(fruit_id, 3, 2, 1);

这将以相反的顺序排序。注意:您也可以使用 FIND_IN_SET():

ORDER BY FIND_IN_SET(fruit_id, '3,2,1')