我已经继承了一个已删除记录的数据库。我正在制作一个新闻项目表。这意味着这些记录已经被删除了一些缺少的ID。 您可以打开档案中的任何新闻报道(1000年),然后使用下一个和上一个按钮浏览所有新闻报道。目前,如果您导航到已删除的下一条记录,则会引发记录集文件结尾,并显示默认消息“新闻项不再可用”。 有没有办法检测到这个缺失的记录,并移动到下一个有效的新闻报道(ID等)?我正在使用旧的ASP为这个网站,有没有办法检测到这一点,而导航通过一个记录集或这种类型的功能必须来自数据库,也许触发?谢谢你的帮助。选择记录,如果不存在(已删除) - 选择下一个有效记录
回答
对于SQL Server 2005及更高版本,请参阅MSDN。
您可以使用row_number
来创建一个连续数字列。
1)既然你知道它会影响前端(你的'记录集文件结束'),当然你可以手动增加/减少标识符,并尝试从数据库中获取另一条记录,这似乎是你最好的可以不用进入数据库。但是,如果连续多条记录丢失,这可能非常不利。我建议改变数据库中的代码。
假设你有一个像这样的查询:
SELECT * FROM News WHERE [email protected]
其中@Id是你想获取标识符。相反,你会有这样的事情:
SELECT * FROM News WHERE Id=(SELECT MIN(Id) FROM News WHERE Id>[email protected])
这将允许您选择第一个可用的记录。您应该使用MAX而不是MIN,如果您要查找'previous'消息,则应该使用MAX而不是> =,上面的示例应该适用于下一个消息。
而且不要忘了,使用这种方法,你将不得不增加基于价值的一个/上一个记录/递减标识符从数据库,而不是说你正在寻找牵强。例如:你的SQL表中有以下标识符 - 1,5,12,21。您已经打开Id = 1的新闻项目。 '下一步'按钮将开始寻找Id> = 2,并将返回Id = 5的记录。当你打开它时,你的'下一步'按钮应该查找Id> = 6(不是2)的记录。
下一个问题是,你必须提供记录的不仅是标识您要获取,而且方向中寻找。而且这个参数也应该在http查询字符串中传递。
而且,这种方法可能不是很人性化的,因为有以下网址将会显示同一项目的所有页面:
网站/ news.asp ID = 2 &方向=下一个
网站/ news.asp标识? = 3 &方向=下一个
网站/ news.asp?ID = 4 &方向=下一个
网站/ news.asp?编号= 5 &方向=下一
2)因此,也许它会更加用户当你显示c时,友好地确定下一个和上一个记录是哪一个urrent纪录。在这种情况下,你将不得不这样执行查询:
SELECT (SELECT MAX(Id) FROM News WHERE Id<@Id) as previousId, (SELECT MIN(Id) FROM News WHERE Id>@Id) as nextId
,然后相应地更新你的“下一步” &“上一个”按钮的URL。因此,如果在前面的示例中我们将打开Id = 5的新闻项目,那么'上一个'按钮将直接导航到Id = 1,'Next'按钮将导航到Id = 12。
我相信第二种方法在你的情况下更好,因为它可以用较少的变化来实现,它也允许你实现灰色'Next'&'Previous'链接,如果相应的记录不可用(你会知道这个通过查询为previousId或nextId返回NULL)。
希望这有助于:)
SELECT TOP 1 *
FROM news
WHERE id >= @next_id
ORDER BY
id
- 1. 删除,如果存在记录,如果记录不存在
- 2. 选择记录
- 3. 选择记录
- 4. 根据与上一个记录和下一个记录的关系选择删除记录
- 5. 从表中选择记录,如果某些价值存在,如果不是,请选择其他记录
- 6. 的MySQL选择记录如果其他记录不匹配
- 7. MySQL选择所有记录
- 8. 选择所有记录
- 9. SQL选择记录
- 10. SQL选择记录
- 11. 选择记录ID
- 12. 选择DISTINCT记录
- 13. SQL选择记录
- 14. 选择一些记录
- 15. 选择唯一记录
- 16. 选择多个记录 - MySQL
- 17. 选择单个记录只
- 18. 如何选择总和 - 或 - 0如果没有记录存在?
- 19. 在postgreSQL中选择一个json记录
- 20. 如何选择记录,其中一个孩子不存在
- 21. 选择所有记录但排除关联记录
- 22. 删除在同一张表上从选择查询中选择的记录
- 23. 选择第一个记录每个组
- 24. SQL查询:如何选择记录,但是如果存在父记录,请选择它的最新子项
- 25. 删除所选记录,但不删除当前记录。 c#
- 26. 原则1.2.3不选择所有记录
- 27. 复选框选择多个记录并创建新的关联记录(如果不存在)
- 28. Mysql4:SQL选择一个或零记录
- 29. Freebase;选择一个随机记录?
- 30. 从一个表中选择记录
如果您使用的是数字ID识别这些项目,以及一个和下一个按钮,简单地加上或减去一个,并不意味着说,如果项目没有按3不存在,所以它打开第2项,上一个按钮将再次链接到第2项?目前这项工作如何? – Rob 2011-01-11 12:06:19