поиск статьи по именам в базе данных перед отправкой статьи в базу данных - PullRequest
1 голос
/ 17 апреля 2010

Я хочу создать функцию, которая будет искать в тексте, находить имена, совпадающие с существующими именами в базе данных, и добавлять ссылки на эти имена перед отправкой статьи в базу данных.

т.е. текст: «Челси» меняет ситуацию, так как голкипера Николаса Анелька заменяет Флорент Малуда, который не может ошибаться в последнее время.

Николас Анелька существует в базе данных в таблице игроков с идентификатором столбца, равным 1.

Я хочу, чтобы текст был преобразован в «Челси» вносит изменения сейчас, так как забивший голы a href = "player.asp = ID = 1" Николас Анелька / а заменен в форме Флоран Малуда, который не может делать ошибки в последнее время.

Проблема с моим кодом в том, что у меня имена игроков хранятся в одном столбце. Итак, Николас Анелька - это один столбец, поэтому имена не совпадают с буквами.


Function PlayerStats (ArticleDesc)

If IsNull(ArticleDesc) Then Exit Function

WordArray = Split(ArticleDesc, " ")

For i = 1 to Ubound(WordArray)

SQL = "SELECT PlayerID, PlayerName"
SQL = SQL & " FROM Players"
Set objPlayer = objConn.Execute(SQL)    

Do While NOT objPlayer.EOF

If WordArray(i) = objPlayer("PlayerName") Then
PlayerStats = objPlayer("PlayerName") & " is in the database!"
Else
End If

objPlayer.MoveNext
Loop

Next

End Function

Ответы [ 2 ]

0 голосов
/ 19 апреля 2010

В дополнение к последнему предложению Робса для перебора всех игроков / статей, я бы посоветовал вам загрузить все имена игроков / статей и столбец идентификаторов один раз при запуске приложения, чтобы сделать его быстрым.

В зависимости от количества статей об игроках вы можете просто применить грубую силу Replace к своему текстовому контенту:

Предварительная загрузка всех имен игроков и идентификаторов статей при запуске приложения

Global.asa

<script language="vbscript" runat="server">
Sub Application_OnStart
    '... code for database query omitted ..'

    Dim playerarticles(objPlayer.RecordCount, 1) '- init array to RecordCount -'
    Dim i

    i = 0

    While Not objPlayer.EOF
        playerarticles(i, 0) = objPlayer("PlayerName")
        playerarticles(i, 1) = objPlayer("PlayerID")
        objPlayer.MoveNext
        i = i + 1
    Wend

    Application("articles") = playerarticles
End Sub
</script>

пример использования на странице

<%
Option Explicit

Dim parsedtext
Dim i

parsedtext = "Chelsea are making a change now as goalscorer Nicolas Anelka is replaced by in-form Florent Malouda who can do no wrong lately."

For i = 0 To UBound(Application("articles"))
    parsedtext = Replace(parsedtext, Application("articles")(i,0), "<a href=""player.asp?ID=" & Application("articles")(i,1) & """>" & Application("articles")(i,0) & "</a>")
Next

Response.Write(parsedtext)
%>

Если вы извлекаете свой текстовый контент из базы данных и имеете много статей об игроках, вам следует рассмотреть возможность подготовки контента в автономном режиме путем (ночного) обновления базы данных.


долгосрочный просмотр

Как вы планируете обрабатывать обновления базы данных статей об игроках? Просто анализ вашего текста на вставке оставит вас в конечном итоге статьи, которые не ссылаются на игроков, добавленных в базу данных позже.

Как упоминалось выше, лучшим решением будет какая-то работа, которая сканирует ваши статьи на предмет имен игроков, которые еще не связаны между собой. Ваше веб-приложение не будет загромождено кодом, связанным с содержанием вашего контента.

0 голосов
/ 17 апреля 2010

Может сделать sql COUNT, если число больше 0 соответствует ...

variable =  SELECT COUNT(*) FROM table WHERE 'field' = 'search term' 

if(variable <= 0) {
    // Run code here
}

Я не уверен, как это сделать с помощью asp-кода, но именно так я и сделал бы в теории

надеюсь, это поможет:)

EDIT:

ммм, проблема в том, что это статья, которая говорит 1000 слов, БД должна была бы сделать 1000 поисков, я бы сказал, довольно дорого.

Однако, чтобы ускорить процесс, вы могли бы использовать использование индекса FULLTEXT, и, как вы сказали, разделив его на слова, проходящие по каждому из них в поисках ссылок, недостатком этого является то, что вы можете получить несколько результатов для одного и того же слова.

Я бы сказал, что лучшим способом было бы перевернуть его, вместо того, чтобы разбивать текстовые слова в поисках имен, почему бы не сделать это наоборот, перебрать все статьи в поисках ссылок в тексте, а затем сделать ссылку , Хотя все эти решения стоят дорого!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...