2011-03-29 149 views
0

我有一个PHP搜索页面,我可以输入一个字符串进行搜索。 另外我写了一个页面,显示与数据库中的字符串匹配的结果。 SQL查询使用MySQL数据库和PHP搜索

$query = "select * from table_name WHERE Name LIKE '$srch' || Last LIKE '$srch' || email LIKE '$srch' || comment LIKE '$srch'"; 

如果搜索字符串为“约翰·戴维”,我想显示包含 无论是“约翰”或“大卫”,而不是只显示结果中的每个记录中同时包含“约翰·大卫“,因为我有John Samuel,David Grecco,Jennifer Davidson等人的记录。

回答

0

你可以将你的字符串分解为单词,并对它们分别进行搜索。

$where_clause = ""; 
foreach($words as $key=>$word){ 
    $or = ""; 
    if (isset($words[$key+1])){ 
    $or = " OR"; 
    } 
    $where_clause = "Name LIKE '$srch' || Last LIKE '$srch' || email LIKE '$srch' || comment LIKE '$srch' {$or}"; 
} 

我认为这将是正确的

+0

yes..i将字符串分解为数组。我如何将它与数据库中的每个值进行比较?您可以请在这里发布一些示例代码 – SK0004 2011-03-29 19:27:19

+0

您可以为每个单词生成带有OR状态网的WHERE子句。或者对每个单词运行查询,然后合并结果。我会在一分钟后发布一个例子 – Headshota 2011-03-29 19:30:12

+0

得到了一个像Warning一样的错误:为foreach()提供的无效参数() – SK0004 2011-03-29 19:46:55

2

你可能想要做布尔模式MySQL的全文搜索。见http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

编辑:为了详细说明,您的查询就会变成:

$query = "SELECT * FROM table_name WHERE 
      MATCH (Name,Last,email,comment) 
      AGAINST('$srch' IN BOOLEAN MODE)"; 

如果还是对你的工作,那么你将要在您正在搜索的列添加FULLTEXT索引。

0

我个人并没有使用它,但是你可能有幸运用mySQL的REGEXP运算符。

从MySQL的REGEXP

正则表达式运算符EXPR NOT REGEXP拍拍,EXPR NOT RLIKE拍拍

这是同为NOT(表达式REGEXP PAT)。

EXPR REGEXP轻拍,EXPR RLIKE轻拍

执行字符串表达式模式匹配EXPR针对图案 轻拍。该模式可以是一个扩展的正则表达式,本节后面讨论的 的语法。如果expr与 pat返回1;否则返回0.如果expr或pat为NULL,则结果 为NULL。 RLIKE是REGEXP的同义词,为mSQL 兼容性提供。

该模式不必是文字字符串。例如,它可以是指定为字符串表达式或表列的 。

注意因为MySQL在字符串中使用C转义语法(例如, “\ n”表示换行符),所以您必须加倍使用您在REGEXP字符串中使用的任何“\”。

REGEXP不区分大小写,除非与二进制字符串一起使用。

mysql> SELECT'Monty!' REGEXP'。 '; - > 1 mysql> SELECT'new \ n * line'REGEXP'new \ *。\*线'; - > 1 mysql> SELECT'a'REGEXP'A','a'REGEXP BINARY'A'; - > 1 0 mysql> SELECT'a'REGEXP'^ [a-d]'; - > 1当决定字符的类型并执行 比较时,REGEXP和RLIKE使用参数的字符集和归类。