创建SQL表的列以根据其顺序对记录进行编号

时间:2014-03-13 14:44:49

标签: sql sql-server database sorting

我有一个Web程序(PHP和JavaScript),需要根据最近添加的内容显示表中的条目。为了实现这一点,我希望表中的一列代表条目号,而另一列代表它应该显示的内容。

例如,如果我有10条记录,ID=10将对应Display=1。我想知道是否有一种简单的方法来更新它,按entry ID排序并相应地生成display ID

3 个答案:

答案 0 :(得分:1)

为什么您没有使用SQLServer的默认列值?看看这里有一个示例:Add default value of datetime field in SQL Server to a timestamp

例如,您有一个这样的表:

create table test (
    entry_id number,
    message varchar(100),
    created_time datetime default GETDATE()
);

然后你可以像

一样插入
insert into test values (1, "test1");
insert into test values (2, "test2");

选择

select entry_id, message from test order by created_time desc

答案 1 :(得分:1)

你的问题有点模糊,但这里有......

通常ID会提升,最高ID是最近添加的,因此您可以在查询中ORDER by ID desc来确定应显示哪些ID。您从查询中获得的结果将是显示顺序。

答案 2 :(得分:0)

有很多方法可以做到这一点。正如其他人所指出的那样,存储反向或反向id是不常见的。你可以通过几种方式获得display_id。很快就会想到这些:

CREATE TABLE test (entry_id INT)
GO
INSERT INTO test VALUES (1),(2),(3)
GO

--if you trust your entry_id is truly sequential 1 to n you can reverse it for the display_id using a subquery
SELECT entry_id,
       (SELECT MAX(entry_id) + 1 FROM test) - entry_id display_id 
FROM test

--or a cte
;WITH cte AS (SELECT MAX(entry_id) + 1  max_id FROM test)  
 SELECT entry_id,  
       max_id - entry_id display_id     
  FROM test
       CROSS APPLY 
       cte

--more generally you can generate a row easily since sql server 2005
SELECT entry_id
      ,ROW_NUMBER() OVER (ORDER BY entry_id DESC)  display_id
  FROM test

您可以在视图中使用这些方法中的任何一种来添加显示ID。通常情况下,我建议您只让表示层处理显示的编号,但如果您打算对其进行查询,则可能需要保留它。如果写入相对于读取不频繁,我只能看到存储它。你可以更新一个真实的"列使用触发器。您还可以创建一个持久计算列。