php通过mysql字段搜索字符串匹配

时间:2011-04-21 21:16:34

标签: php mysql search field

我有一个输入框,可以在我的表格中输入和搜索多个单词。

假设用户输入'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 . ' ) '
                            );
}

我不知道该做什么或从哪里去,但请帮忙!

2 个答案:

答案 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$%') ...