Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关键词搜索:在字符串中查找子字符串_Php_Mysql - Fatal编程技术网

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的searchign
where关键字,比如%()%
好吧,如果你有,我可能需要一个例子哦,好吧,我明白了。我得花点时间来实现这个。酷。设置好后,运行@Jon的
选择DISTINCT…
查询。它将删除所有重复的条目,给您留下单独的标题。