【发布时间】:2018-03-17 21:35:57
【问题描述】:
所以让我给你一些信息,我有一个博客系统,它支持数据库,数据库保存文章的标题。现在我尝试创建一个“相关新闻”功能,它相当基本,它只是获取现有页面的标题并将其拆分为这样(注意 $row_object_title 只是从数据库中提取的标题):
$row_object_title_lower = strtolower($row_object_title);
$keywords = explode(" ",$row_object_title_lower);
然后我通过我的函数运行它:
exclude_conjuctions($keywords);
该函数的代码(查找某些单词并将其从数组中删除:
function exclude_conjuctions($array){
global $keywords_new;
$keywords_new = $array;
$conjuctions = array("here","to","and","but","or","nor","for");
$counter = count($keywords_new);
foreach($conjuctions as $conjuction){
for($i=0;$i <= $counter;$i++){
if ($keywords_new[$i] == $conjuction){
unset($keywords_new[$i]);
}
}
}
return $keywords_new;
}
所以现在我将构建我的查询来检索标题中包含关键字的所有文章:
$sql = '';
foreach ($keywords_new AS $keyword)
{
if ($sql != '')
$sql .= ' OR ';
$sql .= "object_title LIKE '%$keyword%'";
}
$squery = 'SELECT object_title FROM example_table WHERE '.$sql;
现在。它似乎工作正常,但有时它返回的标题与当前文章的单词不同,所以我对其进行了调查,似乎它选择了部分单词并返回它,这当然是不是我们想要的,如果您感到困惑,请查看此图片:
注意我是如何搜索“dow”的,这些字母在当前标题和检索到的标题中都可以找到。当然我需要它只返回标题中包含完整单词的相关文章,而不是单词的一部分。我做错了什么伙计们?也许我的 MySQL 查询需要更改?也许有更好的解决方案?希望得到一些帮助。
这是一个你可以想象的问题。
提前感谢您的帮助。
【问题讨论】:
-
你能把 echo $sql;在 $squery(stuff) 之前并显示完整的查询?
-
@przeqpiciel 当然:选择 object_title FROM webmanage_objects WHERE object_title LIKE '%messaging%' OR object_title LIKE '%service%' OR object_title LIKE '%whatsapp%' OR object_title LIKE '%goes%' OR object_title LIKE '%down%' OR object_title LIKE '%same%' OR object_title LIKE '%day%' OR object_title LIKE '%it%' OR object_title LIKE '%boasts%' OR object_title LIKE '%of%' OR object_title LIKE ' %record%' OR object_title LIKE '%usage%' AND parentid=564 AND is_visible=1 AND archived=0 ORDER BY published_date DESC LIMIT 0,10
-
如果您将此查询放入 phpmyadmin 会怎样?是你想要的回报吗?在我看来,您应该像这样从表中选择字段(您构建了 OR 的查询)AND (parentid=564 AND is_visible=1 AND archived=0) ORDER BY ... 其他东西