假设我们有一个包含以下数据的简单数据库:
name
apple
pear
banana
grape
用户希望按名称对这些水果进行排序,我们将毫不奇怪地将其用于
apple
banana
grape
pear
但是,出于某种原因,用户希望将pear
作为第3个水果,这意味着他希望:
apple
banana
pear
grape
而且,重要的是,用户希望在此后按名称对水果进行排序时保留此顺序。
我们该如何解决这个问题?在我的头脑中,我们可以添加一个字段user_sort_id
,当用户对排序结果进行排序和操作时,它将被更新,我们将使用该字段作为排序键。
init value -> sort by name ->place pear as the seconds
name user_sort_id
apple 0 0 0
pear 1 3 2
banana 2 1 1
grape 3 2 3
这种方法应该在理论上起作用。但是,在实践中,我无法想到一个优雅而快速的SQL语句可以实现这一目标。任何想法或替代品?
答案 0 :(得分:1)
如果您希望每个用户都有独立的排序顺序,则需要另一个表。
CREATE TABLE user_sort_order (
name VARCHAR(?) NOT NULL REFERENCES your-other-table (name),
user_id INTEGER NOT NULL REFERENCES users (user_id),
sort_order INTEGER NOT NULL -- Could be float or decimal
);
然后订购很容易。
SELECT name
FROM user_sort_order
WHERE user_id = ?
ORDER BY sort_order
更新没有灵丹妙药。