Php 如何在MySQL中搜索记录中的城市

Php 如何在MySQL中搜索记录中的城市,php,sql,mysql,Php,Sql,Mysql,我必须按城市搜索用户,但我的问题是在city字段的用户表中 有两个像这样的城市arizona@losvegas,因为在注册中用户可以选择两个城市 那么如何按城市名称搜索城市? 就像有人在亚利桑那州搜索所有用户一样 我在SELECTquery中使用了LIKE来实现这一点,但我需要其他方法来实现这一点。好吧,最明显的方法是使用LIKE。我不知道你为什么不想用它: select * from users where city like '%arizona%'; 也许你可以告诉我你为什么要像那样试图避

我必须按城市搜索用户,但我的问题是在
city
字段的用户表中 有两个像这样的城市arizona@losvegas,因为在注册中用户可以选择两个城市

那么如何按城市名称搜索城市?
就像有人在亚利桑那州搜索所有用户一样


我在
SELECT
query中使用了
LIKE
来实现这一点,但我需要其他方法来实现这一点。

好吧,最明显的方法是使用LIKE。我不知道你为什么不想用它:

select * from users where city like '%arizona%';

也许你可以告诉我你为什么要像那样试图避免,有人会给你一些想法。如果你需要的是一个比LIKE更好的模式匹配器,你可以使用operator。

我在这里做了一个粗略的猜测,并假设LIKE的问题是,它也可能匹配其他城市中包含的城市(然而,我想不出这样的例子)。要克服这一点,可以使用以下三个谓词:

WHERE city LIKE 'arizona@%' 
OR city like '%@arizona'
OR city like 'arizona'

然而,在我看来,将两个城市合并在一个纵队中首先是糟糕的设计。为什么不创建两列,为每个城市创建一行,或者创建一个额外的表,将cites链接到用户。

我有点困惑,为什么数据库没有为每个用户创建多个城市元组。但是,如果您想要一种更强大的方式在MySQL中进行搜索,您可以通过以下列中的文本进行搜索:

这与以p结尾的员工姓名相匹配,因为
$
是字符串锚的结尾。您还可以执行以下操作:

SELECT username FROM userTable WHERE city RLIKE '[Mm]assachusett?s'
。。。如果,天哪,人们不知道马萨诸塞州有两个“不”之类的


正则表达式非常强大,所以如果您想使用它,您可以。但是说实话,考虑到你在寻找什么,使用像“%arizona%”这样的
非常好。

我想知道这个问题的其他方法,他们还有其他方法吗?我在答案中添加了REGEXP操作符。就在我用regexes编写答案的时候:)每行有一个城市不是更好吗?简化搜索
SELECT username FROM userTable WHERE city RLIKE '[Mm]assachusett?s'