网页布局中有几个选项
用户可以选择布局的顺序,例如他们可以将订阅量最多的新闻订购到订单的顶部。
所以我正在考虑如何在表中存储可以方便开发的选项。
选择的数量是固定的,只有这5个选择 用户将经常更新订单
我在考虑:
创建一个false
表
user_choice
所以,当用户注册表在表中创建记录时,每当更新更改行时,这种方法似乎是可行的,但也不能直接在程序中重新排序布局
那么,有没有更好的结构思路?
感谢您的帮助
答案 0 :(得分:3)
我将使用layout_order
,user id
和layout_id
创建一个表order_id
,这样可以轻松添加更多布局,而无需在表格中添加更多列。
创建新用户时,您可以指定默认订单。
user_id layout_id order_id
1 1 1
1 2 2
1 3 3
1 4 4
1 5 5
以下是UPDATE
的示例。该布局需要@user_id
,@layout_id
和@order_id
。
在这里,我使用变量创建一个带有特殊rank
ORDER BY
SqlFiddle Demo 您可以查看SELECT
JOIN
返回的内容
SET @layout_id = 5;
SET @order_id = 2;
SET @user_id = 1;
UPDATE layout_order L
JOIN (SELECT l.*, @rownumber := @rownumber + 1 AS rank
FROM layout_order l
CROSS JOIN (select @rownumber := 0) r
WHERE user_id = @user_id
ORDER BY CASE
WHEN layout_id = @layout_id THEN @order_id -- here is the variable
WHEN order_id < @order_id THEN order_id -- order doesn't change
WHEN order_id >= @order_id THEN order_id + 1
END
) t
ON L.user_id = t.user_id
AND L.layout_id = t.layout_id
SET L.order_id = t.rank;
答案 1 :(得分:1)
我会朝着这个方向前进:
create table user
( -- your pre-existing user table, this is a stub
id int auto_increment primary key
-- the rest
);
create table sortChoices
( -- codes and descriptions of them
code int auto_increment primary key,
description varchar(100) not null
);
create table user_sortChoices_Junction
( -- intersect or junction table for user / sortChoices
userId int not null,
code int not null,
theOrder int not null,
primary key (userId,code), -- prevents dupes
constraint `fk_2user` foreign key (userId) references user(id),
constraint `fk_2sc` foreign key (code) references sortChoices(code)
);
联络桌驱动它,是灵活的,而那些跟随的人不会把自己锁定在相同的思维中,只会有5&#39;
另外,对于喜欢CSV值的其他人来说,存在数据规范化问题。这是我为此所做的write-up,并与Junction Tables联系。
所以,对于那些接下来的人来说,这和OP问题一样多。