我有一个Web程序(PHP和JavaScript),需要根据最近添加的内容显示表中的条目。为了实现这一点,我希望表中的一列代表条目号,而另一列代表它应该显示的内容。
例如,如果我有10条记录,ID=10
将对应Display=1
。我想知道是否有一种简单的方法来更新它,按entry ID
排序并相应地生成display ID
。
答案 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。通常情况下,我建议您只让表示层处理显示的编号,但如果您打算对其进行查询,则可能需要保留它。如果写入相对于读取不频繁,我只能看到存储它。你可以更新一个真实的"列使用触发器。您还可以创建一个持久计算列。