我有一个字符串,如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,那么必须开始相同的结果,所以我的单词顺序无关紧要......
答案 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()将空格作为分隔符连接在一起,并在查询时将它们与输入字符串进行比较。