我有一个输入框,可以在我的表格中输入和搜索多个单词。
假设用户输入'people places things'作为他们的搜索条件,这些应该被提交到我的php函数,该函数搜索我的'nouns'表和'description'和'title'字段以查找可能的匹配。然后,该函数应按发现的匹配数降序对结果进行排序。
到目前为止我得到了什么(遗漏了很多,甚至可能没有正确的方法):$lcSearchVal = "people places things";
$lcSearchVal = explode( ' ', $lcSearchVal );
foreach( $lcSearchVal as $lcSearchWord ){
$qry_suggest = mysql_query( 'SELECT * FROM nouns
WHERE Active
AND ( ' . strpos($lcSearchWord, "description") > 0 . '
OR ' . strpos($lcSearchWord, "title") > 0 . ' ) '
);
}
我不知道该做什么或从哪里去,但请帮忙!
答案 0 :(得分:3)
您正在使用的查询将不起作用 - 您正在使用PHP函数与普通字符串进行比较,并在查询中附加该比较的结果。所有数据库都会看到:
SELECT * FROM nouns WHERE Active AND (-1 OR 0)
...因为php strpos
函数返回找到的字符串的数字位置(如果没有找到则返回-1。你需要在数据库本身内使用比较函数,因此,你不是在php之后函数,而不是你想要mySQL比较函数。
供参考,以下列出:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
以下是一个非常简单的搜索匹配的示例。你可以改进这段代码,但这应该给你一个想法:
$lcSearchVal = "people places things";
$lcSearchVal = explode( ' ', $lcSearchVal );
$sql = 'SELECT * FROM nouns WHERE Active=1 AND (';
$parts = array();
foreach( $lcSearchVal as $lcSearchWord ){
$parts[] = '`description` LIKE "%'.$lcSearchWord.'%"';
$parts[] = '`title` LIKE "%'.$lcSearchWord.'%"';
}
$sql .= implode(' OR ', $parts).')';
print $sql;
搞清楚:http://codepad.org/fcNH5qyu
另请注意,您的WHERE Active
条款无效 - 您必须对其进行比较。我在我的示例中假设Active
字段是数字1或0。
答案 1 :(得分:0)
您不能将PHP函数与SQL混合使用。您的查询将类似于:
... WHERE Active AND (1 or 0) ...
我猜你想要这样的东西:
$lcSearchWord = mysql_real_escape_string($lcSearchWord);
... WHERE Active=1 AND (description LIKE '%$lcSearchWord$%' OR title LIKE '%$lcSearchWord$%') ...