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')
我想让我的用户制作一车水果,但也允许他们以他们想要的方式订购。 我会尽量用最简单的方式解释我的问题。
一个 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')