where field1 + field2 + field3 LIKE“%my_own_string%”?

时间:2011-11-05 21:36:48

标签: php mysql

我有一个字符串,如Elton 1999和一个包含4个字段的MySql表:

table(id, name, surname, year)

我必须检查是否将这些字段作为“单个字段”加入,它包含我字符串中的所有单词。

我的意思是:

1 Elton John 1999 -> must return the record
2 Elton Peter 1999 -> must return the record
3 Paris Elton 1999 -> must return the record
4 Elto John 1999 -> must not return the record
5 Elton Pierre 2000 -> must not return the record

我是否可以直接使用MySql进行操作,或者首先需要获取所有记录,然后在服务器端解析它们? (在PHP上,在我的情况下)

P.S。如果我的字符串是1999 Elton,那么必须开始相同的结果,所以我的单词顺序无关紧要......

2 个答案:

答案 0 :(得分:3)

SELECT * FROM myTbl WHERE CONCAT(name, surname, year) LIKE '%ELTON%1999'

SELECT * FROM myTbl WHERE CONCAT_WS(' ', name, surname, year) LIKE '%ELTON%1999'

在每个字段之间添加空格。 Thx majic bunnie。

更新:好吧,如果您想在任何列中搜索可能的匹配项,并且按任意顺序搜索一列值,那么您可以按空格分解字符串并单独搜索每个单词。看看是否有效

$query = "SELECT * FROM myTbl";
if(!empty($searchString)){
  $query .= " WHERE ";
  $arr = explode(' ', $searchString);
  foreach($arr as $word)
    $fields[] = "CONCAT_WS(' ', name, surname, year) LIKE %$word%";
  $query .= implode(" AND ", $fields);
}

PS - 我最近从@yahyaE here学到了这种查询构建技术:)

答案 1 :(得分:2)

只要您的输入字符串格式一致,您就应该能够使用CONCAT_WS()将空格作为分隔符连接在一起,并在查询时将它们与输入字符串进行比较。