1

假设我有以下情况:

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

MySQL数据库:

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

我应该如何获取整个字符串 - 不拆分它 - 并检查 city 中的任何值是否出现在任何字符串中?

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

4

5 回答 5

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

于 2013-06-19T20:51:45.503 回答
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”,然后是字符串的结尾或非字母字符。简而言之,它只会找到整个单词。

于 2013-06-19T20:58:12.883 回答
0

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

对于 mySQL,您可以使用REGEXP 运算符

在 php 中你可以使用preg_match

正则表达式将是

".*" + city + ".*"
于 2013-06-19T20:42:26.583 回答
0

我会尝试 2 件事,看看哪个是 fasets\ 效果最好,这取决于我在做什么

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

  2. 在 while 循环中从数据库中输入城市,并使用 strpos() 检查字符串中是否存在。

于 2013-06-19T20:42:46.640 回答
0
WHERE $str1 LIKE CONCAT('%', city, '%') OR $str2 LIKE CONCAT(...) ...

ps:记住$str1应该正确转义或用作准备好的语句参数。

于 2013-06-19T20:58:26.847 回答