我有一个包含文本字段的表。在那些字段中我存储文本。根据行,每个字段中有大约20到50个句子。我正在使用HTML和PHP制作一个自动完成的HTML对象,我想开始输入一个单词的开头,并且数据库返回包含这些单词的句子(如Microsoft Office 2007/2010导航窗格)。
我需要mysql将这些单词或句子作为单独的结果返回,所以我可以进一步操作它们。
示例:
--------------------------------------------------------------------
| id | title |content |
--------------------------------------------------------------------
1 | test 1 | PHP is a very nice language and has nice features.
2 | test 2 | Spain is a nice country to visit and has nice language.
3 | test 3 | Perl isn\'t as nice a language as PHP.
我需要mysql查询以不同的结果返回以下内容:
1,"nice language"
1,"nice features"
2,"nice country"
2,"nice langugage"
3,"nicea a language"
这是我的SQL查询:
SELECT id, SUBSTR(content,POSITION('nice' IN content),50)
FROM entries
MATCH (title,entry) AGAINST ('nice' WITH QUERY EXPANSION)
答案 0 :(得分:3)
OP实际上与php和javascript无关 - 他的问题涉及在MySQL中直接进行字符串操作。
字符串操作并不是DBMS的主要关注点。在流畅的文本意义上处理“单词”时,需要很多逻辑来确定下一个单词边界的位置,并且您不希望数据库真的这样做。此外,任何为此而写的查询都可能难以理解。
这完全取决于你在做什么,但很可能只有DB的方法会慢一些,因为会有更多的函数调用:SQL函数非常有限。
对于可重用性和最佳实践,如果您希望将来更改数据库以说MongoDB怎么办?你需要重写整个该死的笨拙的查询。
不,我的建议是将使用标准MySQL的全部价值提取到PHP中,将其放入PCRE,非常简单的正则表达式,完成工作。最好显示你在PHP代码中实际做了什么,因为它更“意图揭示”。
至少33%的开发人员的工作是为工作挑选合适的工具。在这个例子中,PHP是正确的工具。
您已添加了代码php和javascript,因此我猜测(虽然您的问题需要对此进行更多澄清),您显然希望此“自动完成”运行客户端。因此,您必须先从服务器端向客户端 获取数据。
Twitter Bootstrap有一个很酷的东西叫Typeahead。这使用JavaScript来执行(我认为)您需要的内容:该页面上的示例显示了如何键入国家/地区,它将自动为您完成。它看起来像这样:
你是如何得到这个工作的?首先包含所需的JavaScript文件,然后编写HTML。
这里有一些来自bootstrap页面的源代码,所以你可以看到它是如何工作的:
<input type="text" data-provide="typeahead" data-items="4" data-source='["Alabama","Alaska","Arizona","Arkansas","California"]'>
您能看到data-source
属性是如何为typeahead提供您想要的信息吗?您想要连接到MySQL,抓取您的数据,然后将这些数据推送到data-source
数组中,以供JavaScript使用,如上所述。
因此,在您的页面加载中,您连接到MySQL并从数据库中提取您希望“自动完成”的所有相关字符串。然后,您将这些作为typeahead的新Data属性,这就是它!
-
编辑:有一个twitter bootstrap的预先that allows AJAX calls的分支,所以你可以用它来异步执行数据检索(如果你能搞清楚,我会推荐这种方法)。