2013-04-15 2 views
4

책에 대한 사용자 입력이 많은 varchar (1000) 필드가있는 테이블이 하나있는 SQL Server 2008 데이터베이스가 있습니다. 여러 개의 키워드가 들어있는 다른 표가 있습니다. 책에 대한 사용자 정보를 렌더링 할 때이 키워드에 강조 표시 (또는 결국 하이퍼 링크를 작성)하고 싶습니다. 나는 텍스트를 스캔하고 키워드를 일치시키는 가장 효율적인 방법에 대한 제안을 찾고있다. SQL에서 올바르게 처리 할 방법이 있는지 또는 코드에 있어야하는지는 확실하지 않았습니다. 감사.텍스트의 키워드 강조 표시

+0

사용자가 입력 한 키워드가 마스터 키 테이블에 대한 외래 키입니까? 두 테이블의 스키마는 무엇입니까? –

+0

1) foreach 문자열 배열에 [book에 대한 사용자 입력]을 입력하십시오. 2) 각 문자열을 키워드와 비교하여 하이퍼 링크로 렌더링하십시오. 3) 분석 결과의 응답 시간을 확인하십시오 –

+1

코드를 통해서만 수행해야합니다. 오히려 SQL .. – Mudassir

답변

0

코드에서 수행하는 것이 좋습니다. 그것은 비즈니스 로직이기 때문에 데이터베이스의 부하를 줄여줍니다. 따라서 데이터베이스가 앱을 실행하는 서버가 아닌 다른 머신에 있다면 그 머신의 리소스를 차지하지 않아도됩니다.

저는 정규식이 당신에게 트릭을 제공 할 것이라고 생각합니다. 이것은 가장 효과적인 텍스트 매칭 방법이며, 대부분의 기술 (.NET뿐만 아니라)의 내부 구현은 얻을 수있는 최선의 방법입니다. 당신이 다른 것을 생각해 내려고한다면 당신은 기껏해야 그 바퀴를 재발 명하게 될 것입니다.

나는 이렇게 할 것입니다. 해시 테이블이나 사전에 모든 키워드를 넣으십시오 - 중복을 제거하는 보너스가 있습니다. 그런 다음이를 반복합니다. 그런 다음 본문에있는 키워드의 각 일치 항목에 대해 일치 항목의 첫 번째 및 마지막 색인을 가져 와서 하이라이트 및 링크에 대한 마크 업으로 마무리 할 수 ​​있습니다.

0

다음은 키에 일치하는 사전 값이있는 문자열의 값을 바꿀 빠른 LINQPad 프로그램입니다. 이것이 당신이 찾고있는 것이라면 알려주십시오.

사이드 노트 : 여러 가지 이유로 응용 프로그램 계층에서이 작업을 수행해야한다는 데 동의합니다.

void Main() 
{ 
    Dictionary<string, string> links = new Dictionary<string, string>(); 
    links.Add("awesome", "link-to-awesome"); 
    links.Add("okay", "link-to-okay"); 

    string text = "This is some text about an okay book review of an otherwise awesome book."; 

    string result = links.Aggregate(text, (current, kvp) => current.Replace(kvp.Key, kvp.Value)); 
    text.Dump(); 
    result.Dump(); 
} 

결과 :

This is some text about an okay book review of an otherwise awesome book. 
This is some text about an link-to-okay book review of an otherwise link-to-awesome book. 

편집 : 이것은 완벽한 예 아니다. 구두점을 없애고 최종 버전을 작성해야합니다. 바라기를 이것은 바른 길에 당신을 얻는다.

0

링크가 고정되어있는 경우 개인적으로 DB에 쓰기 만하면됩니다. 한 번만 수행되므로 표시 할 필요가 없습니다.

관련 문제