用MySQL数据库和PHP搜索

时间:2011-03-29 19:23:16

标签: php mysql

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

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

如果搜索字符串是“John David”,我想显示包含的每条记录 无论是“约翰”还是“大卫”,而不只是显示同时拥有“约翰大卫”的结果,因为我有像约翰塞缪尔,大卫格雷科,詹妮弗戴维森等的记录

3 个答案:

答案 0 :(得分:2)

您可能希望在布尔模式下进行MySQL FULLTEXT搜索。见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索引。

答案 1 :(得分: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}";
}

我认为这是正确的

答案 2 :(得分:0)

我没有亲自使用它,但你可能会对mySQL的REGEXP运营商感到满意。

来自mySQL的REGEXP

  

正则表达式运算符expr NOT REGEXP pat,expr NOT RLIKE pat

     

这与NOT(expr REGEXP pat)相同。

     

expr REGEXP pat,expr RLIKE pat

     

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

     

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

     

注意因为MySQL在字符串中使用C转义语法(例如,   “\ n”代表换行符,你必须加倍“\”   你在REGEXP字符串中使用。

     

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

     

的MySQL>选择'蒙蒂!' REGEXP'。';            - > 1 mysql> SELECT'new \ n * line'REGEXP'new \ *。\ * line';            - > 1 mysql> SELECT'a'REGEXP'A','a'REGEXP BINARY'A';            - > 1 0 mysql>选择'a'REGEXP'^ [a-d]';            - > 1 REGEXP和RLIKE在决定一个字符的类型并执行时,使用参数的字符集和排序规则   比较。