比较字符串与MySQL列

时间:2013-06-19 20:35:20

标签: php mysql sql-like

说我有以下情况:

$string1 = 'This is my string with the city New York in';
$string2 = 'This is my string with the city Los Angeles in';

的MySQL-DB:

id|city
 0|San Diego
 1|Memphis
 2|Los Angeles
 3|Budapest
 4|New York

我该如何处理整个字符串 - 不分割它 - 并检查城市中的任何值是否出现在任何字符串中?

我收到了大量字符串,其中包含的信息比上述更多。

5 个答案:

答案 0 :(得分:1)

如果你是用PHP做的话。

一种方法是将城市查询为数组。然后使用strpos迭代数组,看看你的字符串中是否包含城市,例如

foreach($city in arrayOfCities)
{
  if(strpos($string1, $city) !== false)
  {
    //city found in string do something
  }
}

这可能不是确切的代码,但strpos可行:http://www.php.net/manual/en/function.strpos.php

答案 1 :(得分:1)

在MySQL中你可以这样做:

SELECT id, city
FROM myTable
WHERE INSTR('This is my string with the city New York in', city) > 0

这样的名字会找到名字,即使它们是一个单词的一部分,所以它会在“圣保罗的命名法”中找到Nome。不好的例子,但我能想到的最好:Nome匹配,因为它在nomenclature中找到。要避免这些类型的匹配,需要使用正则表达式:

SELECT id, city
FROM myTable
WHERE 'This is my string with the city New York in'
      RLIKE CONCAT('(^|[^[:alpha:]])', city, '($|[^[:alpha:]])')

正则表达式(连接后)会读取,例如:

(^|[^[:alpha:]])New York($|[^[:alpha:]])

...表示:匹配字符串的开头是非字母字符,然后是值“New York”,然后是字符串或一个非字母的字符。简而言之,它只能找到整个单词。

答案 2 :(得分:0)

您可以在php和mysql中使用正则表达式。

对于mySQL,您可以使用REGEXP operator

在php中,您可以使用preg_match

正则表达式将是

".*" + city + ".*"

答案 3 :(得分:0)

我会尝试2件事,看看哪个是fasets \效果最好根据我做的其他事情

  1. 将所有城市implode()放入管道(|)分隔列表并使用 在preg匹配中,我循环反对字符串。

  2. 在while循环中从db中提取城市,并使用strpos()检查字符串中是否存在。

答案 4 :(得分:0)

WHERE $str1 LIKE CONCAT('%', city, '%') OR $str2 LIKE CONCAT(...) ...

ps:请记住,$str1应该被正确转义或用作预备语句参数。