Php 关键词搜索:在字符串中查找子字符串
我正在建立一个漫画网站,并已实施搜索。搜索最初使用图像标题。。。这很好:Php 关键词搜索:在字符串中查找子字符串,php,mysql,Php,Mysql,我正在建立一个漫画网站,并已实施搜索。搜索最初使用图像标题。。。这很好: if (strtolower($input)==strtolower(substr($row['title'],0,strlen($input)))) { 但是现在我觉得很多人都不记得这个名字了。所以我在数据库中添加了一个名为“关键字”的列,varchar[55]。。。我的测试条目是字符串“五,二,规则,食物,规则”。我想我可以用$row['keywords']替换$row['title']],搜索仍然有效 如果我从字符
if (strtolower($input)==strtolower(substr($row['title'],0,strlen($input)))) {
但是现在我觉得很多人都不记得这个名字了。所以我在数据库中添加了一个名为“关键字”的列,varchar[55]。。。我的测试条目是字符串“五,二,规则,食物,规则”。我想我可以用$row['keywords']
替换$row['title']]
,搜索仍然有效
如果我从字符串的开头开始搜索,比如输入“five,seco…”,它就起作用了,但如果我从字符串的中间开始搜索,比如“second”或“rule”等,它就不起作用了
有什么办法可以让它工作吗
谢谢 简单的解决方案是使用
stripos
:
if(stripos($input, $row['title']) !== false) {
// row matches
}
然而,这并不是一个好的解决方案。最好将筛选工作卸载到数据库中,这样不匹配的行就不必到前端去了。如果您将关键字保留为逗号分隔的字段,则or将是一个不错的工具选择;如果您规范化了数据库模式,以便使用单独的comic_keywords
表对漫画与关键字的1对多关系进行建模,那么匹配将更加容易
例如,假设comic
有id
和comic\u关键字
有comic\u id
和关键字
,您可以选择与
SELECT DISTINCT(comic_id) FROM comic_keywords WHERE keyword = 'blah'
看起来您需要或(不太可能,但更容易设置) 在漫画专栏中这样做只会在破坏正常化的时候流泪。您应该做的是创建一个关键字表,每个条目有一个单词,然后创建一个将关键字与漫画匹配的透视表。然后你可以做一个连接来找到所有匹配的漫画 这需要更多的设置工作,但从长远来看更灵活 编辑: 关键字表:
id keyword
1 x-men
2 action
3 mystery
4 batman
etc.
comic_关键字表
comic_id keyword_id
45 3
678 1
678 2
77 3
77 4
etc.
第二个表(透视表)将漫画的ID与它们关联的关键字的ID相匹配。这就是大多数情况下应建模的多对多关系。您可以动态拆分列:
if (in_array(strtolower($input), explode(', ', $row['title']))) {
/* found it */
}
为什么不使用MySQL
比如
查询?@MrCode,好主意,但是如果搜索多个顺序错误的关键字,那么它就不会有帮助了……我想是的,Sphinx/Lucene/etc总是比较容易设置的解决方案。[/sarcasm]或者更进一步,使用@mrcode的searchignwhere关键字,比如%()%
好吧,如果你有,我可能需要一个例子哦,好吧,我明白了。我得花点时间来实现这个。酷。设置好后,运行@Jon的选择DISTINCT…
查询。它将删除所有重复的条目,给您留下单独的标题。