我想让我的用户做一个购物车的水果,但也允许他们订购他们想要的方式。我将尽量用最简单的方式解释我的问题。
一个表"user“包含具有自动增量id字段的用户。
-----------------
| id | username |
-----------------我有一张桌子上的“水果”女巫里面有水果。
--------------
| id | fruit |
--------------我希望允许用户拥有一个包含水果的购物车,所以我创建了“购物车”表:
---------------------------
| id | user_id | fruit_id |
---------------------------例如,
我在“水果”里有:
--------------
| 1 | Banana |
| 2 | Apple |
| 3 | Orange |
--------------如果用户1想要“购物车”中的每一个
---------------------------
| 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可排序数组重新排列它的购物车,以便MySQL为他排序。
我认为有一种解决方案似乎不是最好的方法:用user_id和一串需要解析的fruit_id重做“购物车”表。
第二种方法是删除条目并以良好的顺序重新输入,以便按id排序,但我对这种情况并不满意。
你知道一个更好/更干净的方法吗?
非常感谢您的洞察力/评论/知识。
发布于 2016-08-05 01:48:33
SQL表表示无序集。类似地,除非使用ORDER BY,否则结果集是无序的。
你似乎有两个选择。如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')https://stackoverflow.com/questions/38779516
复制相似问题