我想创建一个函数来搜索文本,查找与数据库中现有名称匹配的名称,并在将文章提交到数据库之前添加指向这些名称的链接。
即。 文本: 切尔西现在正在做出改变,因为射手尼古拉斯·阿内尔卡被形式上的弗洛伦特·马卢达所取代,后者最近也没有做错。
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
答案 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)
%>
如果您从数据库中提取文本内容并拥有大量播放器文章,则应考虑(每晚)通过数据库更新离线准备内容。
长期观点
您打算如何处理播放器文章数据库的更新?只需在插入文本中解析文本,就会发现文章没有链接到以后添加到数据库中的玩家。
如上所述,某些工作会扫描您的文章中没有链接的玩家名称,这将是一个更好的解决方案。您的网络应用程序不会混淆与维护您的内容有关的代码。