在将文章提交到数据库之前在数据库中搜索文章名称

时间:2010-04-16 20:30:34

标签: asp-classic

我想创建一个函数来搜索文本,查找与数据库中现有名称匹配的名称,并在将文章提交到数据库之前添加指向这些名称的链接。

即。 文本: 切尔西现在正在做出改变,因为射手尼古拉斯·阿内尔卡被形式上的弗洛伦特·马卢达所取代,后者最近也没有做错。

Nicolas Anelka存在于Players表的数据库中,ID列等于1。

我希望将文字转换为 切尔西现在正在做出一个改变,因为射手是一名球员,而尼克拉斯·阿内尔卡/一名被形式上的弗洛伦特·马卢达所取代,后者最近也没有做错。

我的代码问题在于我将播放器名称存储在一列中。所以Nicolas Anelka是一个专栏,因此名字与字母不匹配。


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 :(得分:0)

如果计数大于0,则可以执行sql COUNT匹配......

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

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

我不确定如何使用asp代码执行此操作,但这就是我在理论上如何做到这一点

希望这有助于:)

编辑:

mmm,问题是一篇文章说1000字长,数据库必须进行1000次查找,我说的费用非常昂贵。

然而,为了加快速度,您可以使用FULLTEXT索引,就像你说的那样,分成每个循环查找链接的单词,这样做的缺点是你可能会为同一个单词产生几个结果。 / p>

我想说一个更好的方法是翻转它,而不是将文本单词分开寻找名称,为什么不反过来,遍历所有文章寻找文本中的引用,然后链接。虽然所有这些解决方案都很昂贵!

答案 1 :(得分:0)

扩展Robs的最后建议迭代所有播放器/文章我建议你在应用程序启动时加载所有播放器/文章名称和id列,以使其快速。

根据您播放的文章数量,您可以对文字内容进行蛮力Replace

在应用程序启动时预加载所有玩家名称和文章ID

<强>的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)
%>

如果您从数据库中提取文本内容并拥有大量播放器文章,则应考虑(每晚)通过数据库更新离线准备内容。


长期观点

您打算如何处理播放器文章数据库的更新?只需在插入文本中解析文本,就会发现文章没有链接到以后添加到数据库中的玩家。

如上所述,某些工作会扫描您的文章中没有链接的玩家名称,这将是一个更好的解决方案。您的网络应用程序不会混淆与维护您的内容有关的代码。