繁体   English   中英

PHP通过MySQL字段搜索字符串匹配

[英]php search through mysql fields for string match

我有一个输入框,可以在其中输入多个单词并在表格中进行搜索。

假设用户输入“人们放置的东西”作为他们的搜索条件,那么这些应该提交给我的php函数,该函数通过“名词”表以及“描述”和“标题”字段进行搜索以查找可能的匹配项。 然后,该函数应按找到的匹配数以降序对结果进行排序。

我到目前为止所拥有的(缺少很多,甚至可能没有正确的方法):

$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 . ' ) '
                            );
}

我不确定该怎么做或从这里去哪里。...请帮助!

您使用的查询将不起作用-您正在使用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。

不能将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$%') ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM