sql - 创建可按列排序的数据库表的最佳方法

标签 sql rdbms

我有一个包含未排序行的表,并想让它们按列排序。我希望表格可以按列排序,因此我创建了一个 sort_by 列。

该表现在看起来像这样:

ID  Data   sort_by
--  -----  -------
27  Blahh  1  
54  Blahh  2  
57  Blahh  3  
1   Blahh  4

现在我想在第二个位置插入一行(sort_by = 2)。然后我将不得不使用 sort_by += 1 更新所有 > 2 的行的 sort_by。如果我有几百万行,那就是很多更新。

那么,有没有一种规范的方法来做到这一点?当然,我可以在列之间设置更大的步骤并在间隙中插入新行等,但是有没有一种美观的方式,即不是黑客?

排序由用户手动完成。 google for = upvote 的一个好词,我尝试的所有方法都可以找到在某些 DBMS 或某些框架中对表进行排序的方法。 :)

最佳答案

没有人手动排序一百万行。 你这里有一个 classic XY Problem .

你在问:

How can I sort a million rows in an SQL database?



当你应该问:

How can I promote certain products in an online shop that is managed in a traditional Relational Database Management System?



前者需要一堆乱七八糟的解决方案,例如权重,或精度不断扩大的十进制列,或在数据库链表中。所有这些容易出错的都是违反直觉的,并且忽略了问题域。

你评论说:

Think products you want to present on the start page of a web shop - what the marketing team thinks will sell



那么,我想要在首页上展示什么样的产品?特色产品、在售产品、新品、即将脱销的产品……
-- Wacky featured items are random!
SELECT * FROM products WHERE featured = True ORDER BY RANDOM LIMIT 10;
-- More than 20% wow, thats a great deal!
SELECT * FROM products WHERE discount > 0.2 ORDER BY discount ASC LIMIT 10;
-- New stock, tell me about it!
SELECT * FROM products WHERE added_to_database < now()-24hours ORDER BY added_to_database LIMIT 10;
-- These items are about to disappear for ever, buy now!
SELECT * FROM products WHERE stock_number < 20 ORDER BY stock_number LIMIT 10;

想想你为什么要订购它们,而不是如何订购它们。通过这种方式,您可以根据某些标准获得一些,并且它可以更接近地模拟您正在工作的领域。

关于sql - 创建可按列排序的数据库表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24295919/

相关文章:

php - 数据库中的日期是否在今天和上周之间

indexing - 使用 Liquibase 创建具有降序键列的索引

mysql - 计算某个属性中具有相同值的元组实例的数量

mysql - 如何确保产品规范适用于类别实体?

php - 在mysql中使用group by查询和order by查询进行选择

php - 检查 Laravel 迁移文件中是否存在列

sql - 合并 - 仅在值发生更改时更新

mysql - SQL 基于外键的约束检查

node.js - 同一应用程序使用 NOSQL 和 RDBMS

postgresql - Postgres 自定义域类型与 UNIQUE