삭제 된 레코드로 데이터베이스를 상속했습니다. 나는 뉴스 항목 테이블에서 일하고있다. 즉, 이러한 레코드가 삭제 된 일부 누락 된 ID가 있음을 의미합니다. 아카이브 (1000 's)에있는 뉴스 스토리를 연 다음 다음 및 이전 버튼을 사용하여 모든 뉴스 기사를 탐색 할 수 있습니다. 현재 삭제 된 다음 레코드로 이동하면 파일의 레코드 세트 종료가 발생하고 "뉴스 항목을 더 이상 사용할 수 없다"는 기본 메시지가 표시됩니다. 누락 된 레코드를 감지하고 다음 유효한 뉴스 기사 (예 : ID 등)로 이동할 수있는 방법이 있습니까? 이 사이트에 대해 오래된 ASP를 사용하고 있습니다. 레코드 집합을 탐색하는 동안이를 감지하는 방법이 있습니까? 아니면 이러한 유형의 기능이 데이터베이스에서 가져와야합니까, 아니면 트리거일까요? 어떤 도움을 주셔서 감사합니다.존재하지 않는 레코드 선택 (삭제됨) - 다음 유효한 레코드 선택
답변
SQL Server 2005 이상에 대해서는 MSDN을 참조하십시오.
row_number
을 사용하면 인접한 숫자 열을 만들 수 있습니다.
1) 프론트 엔드 ('레코드 세트 파일 끝')에 영향을 준다는 것을 알기 때문에 수동으로 식별자를 증가/감소시키고 DB에서 다른 레코드를 가져올 수 있습니다. 데이터베이스에 가지 않고도 할 수 있습니다. 그러나 행의 많은 레코드가 누락 된 경우 이는 매우 비 효과적 일 수 있습니다. 대신 데이터베이스에서 코드를 변경하는 것이 좋습니다.
이 같은 쿼리가 한 가정 :
SELECT * FROM News WHERE [email protected]
@Id 당신이 가져 오기 위해 노력하고 식별자입니다. 대신 다음과 같은 내용을 갖게됩니다 :
이렇게하면 처음 사용 가능한 레코드를 선택할 수 있습니다. MIN 대신 MAX를 사용해야하고> = 대신 < = 대신 '이전'뉴스 항목을 사용해야합니다. 위의 예는 다음 뉴스 항목에 적용됩니다.
또한이 방법을 사용하면 찾고 있던 데이터 대신 데이터베이스에서 가져온 값을 기반으로 다음/이전 레코드에 대한 식별자를 증가/감소시켜야한다는 것을 잊지 마십시오. 예 : SQL 테이블에 다음 식별자가 있습니다 (1,5,12,21). Id = 1 인 뉴스 항목을 열었습니다. '다음'버튼은 Id> = 2를 찾고 Id = 5 인 레코드를 반환합니다. 열 때 '다음'버튼은 Id> = 6 (2가 아님)으로 레코드를 찾습니다.
다음 포인트는 가져 오려고하는 레코드의 식별자뿐만 아니라 찾고자하는 방향도 제공해야한다는 것입니다. 그리고이 매개 변수는 http 쿼리 문자열에도 전달되어야합니다.
또한이 방법은없는 매우 사용자 친화적 같은 항목이 표시됩니다 URL을 다음과 같이 모든 페이지 이후 수 있습니다 :사이트/news.asp을 식 2 & 방향 = 다음
사이트/news.asp 아이디? = 3 & 방향 = 다음
사이트/news.asp? 아이디 = 4 & 방향 = 다음
사이트/news.asp? 다음 식 (5) & 방향 =
2) 그래서 어쩌면 더 많은 사용자 - 될 것입니다 어떤 레코드가 다음과 이전인지 미리 결정할 수 있습니다. c를 표시 할 때 유력한 기록.
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로 직접 이동하고 '다음'버튼이 Id = 12로 이동합니다.
두 번째 접근법은 변경 사항이 적게 적용될 수 있기 때문에 더욱 효과적입니다. 해당 레코드를 사용할 수없는 경우 회색으로 '다음'& '이전'링크를 구현할 수 있습니다. previousId 또는 nextId에 대한 질의에 의해 NULL이 리턴 됨으로써).
희망이 도움이 :)
SELECT TOP 1 *
FROM news
WHERE id >= @next_id
ORDER BY
id
- 1. 콤보 상자에서 레코드 선택
- 2. 여러 레코드 선택 액세스
- 3. 날짜순 정렬 목록에서 다음 레코드 선택
- 4. 중복 된 레코드 선택
- 5. DISTINCT 레코드 선택
- 6. 날짜와 시간으로 레코드 선택
- 7. SQL 레코드 선택
- 8. 존재하지 않는 요소 선택
- 9. 처음부터 제외한 모든 레코드 선택
- 10. ASP.NET 동적 데이터 레코드 선택
- 11. 콤보 상자에서 임의의 레코드 선택
- 12. 레코드 수집 유형에서 데이터 선택
- 13. XSLT/XPath에서 고유 레코드 선택
- 14. '존재하지 않는 경우'를 사용하여 하나의 레코드 입력
- 15. 레코드 삽입 SQLite 쿼리가 존재하지 않는 경우
- 16. 특정 필드를 포함하는 레코드 수의 순서로 레코드 선택
- 17. 하나의 레코드 열 값을 기준으로 다중 레코드 선택
- 18. 최적화 필요 : 특정 번호의 레코드 선택
- 19. SQL - 비활성 상태의 레코드 만 선택
- 20. SQL Server - 중복을 표시하지 않는 임의의 레코드 하나 선택
- 21. 더 많은 조건으로 최신 레코드 선택
- 22. Oracle/SQL - 특정 sysdate 시간에 레코드 선택
- 23. 월 초부터 현재 날짜까지 레코드 선택
- 24. 그룹당 N 개의 임의 레코드 선택
- 25. Codeigniter 활성 레코드 선택, 왼쪽 조인, 카운트
- 26. 레일즈 : 객체의 ID를 가진 객체의 레코드 선택
- 27. Oracle/SQL - 지정된 순차 레코드 범위 선택
- 28. 지난 3 개월 간의 레코드 선택
- 29. 재귀 저장 프로 시저 중 레코드 선택
- 30. Sqlite : 전체 레코드에 걸친 레코드 선택
당신이 숫자 ID를 사용하여 이러한 항목을 식별하고, 이전 및 다음 버튼은 단순히 추가하거나 하나를 뺄 경우, 즉, 그 말은하지 않는 항목 3 아무튼 경우 항목 2가 열리므로 이전 단추가 항목 2에 다시 연결됩니까? 현재 어떻게 작동합니까? – Rob
SQL Server의 버전은 무엇입니까? –