2016-08-05 2 views
0

Я хочу, чтобы мои пользователи могли сделать корзину с фруктами, но также позволяя заказать их так, как они хотят. Я попытаюсь объяснить свою проблему самым простым способом.MySQL - Пользовательский заказ для каждого пользователя

Одна таблица «пользователь» содержит пользователей с полем автоматического увеличения.

----------------- 
| 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 будет сортировать их для него.

Я, хотя один из решений, который, кажется, не лучший способ; Переделайте таблицу «cart» с user_id и строку fruit_id, мне нужно будет разобрать.

Второй способ состоял в том, чтобы удалить записи и повторно ввести их в порядке, чтобы сортировка по идентификатору сортировала их, но я тоже не очень доволен этой ситуацией.

Знаете ли вы о лучшем/чистом способе сделать это?

Благодарим вас за понимание или комментарий/знания.

+1

Либо добавить новый столбец в CART таблицы с именем sort_order. Или выполните сортировку кода с чем-то вроде этого: 'SELECT fruit_id FROM cart WHERE user_id = 1 order by find_in_set (fruit_id, '3,1,2')' –

ответ

1

Таблицы SQL представляют неупорядоченные комплекты. Аналогичным образом, наборы результатов - неупорядоченные, если вы не используете ORDER BY.

Возможно, у вас есть два варианта. Добавьте столбец в таблицу, скажем 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') 
Смежные вопросы