Mysql SQL:查找以给定字符串结尾的DB项

Mysql SQL:查找以给定字符串结尾的DB项,mysql,sql,Mysql,Sql,我需要执行一个SQL请求来提取一些数据。我不确定这是否可能,如果可能,我不知道怎么做。我相信用一个例子更好地说明我想做什么 让我们假设一个非常简单的表: -------------------------- | ID | domain | -------------------------- | 1 | example.com | -------------------------- | 2 | stackoverflow.com | -----------

我需要执行一个SQL请求来提取一些数据。我不确定这是否可能,如果可能,我不知道怎么做。我相信用一个例子更好地说明我想做什么

让我们假设一个非常简单的表:

--------------------------
| ID | domain            |
--------------------------
| 1  | example.com       |
--------------------------
| 2  | stackoverflow.com |
--------------------------
我想检索其
以指定字符串结尾的条目

如果用户输入是
www.example.com
,我可以执行什么请求才能检索其
example.com
的条目

字符串
www.example.com
以字符串
example.com
结尾,这意味着我不能像
SQL构造那样使用
%,因为我正在寻找谓词的子字符串

下面是一个潜在的肮脏解决方法,以使其更加清晰:

user_input = "www.stackoverflow.com"
for domain in get_all_domains_from_db():
    if user_input.endswith(domain):
        print "It's this one!"

Ps:如果有不清楚的地方,请告诉我。

通常您会这样做:

SELECT * FROM tablename WHERE domain LIKE '%example.com'

我建议您不要获取并迭代数据库中的所有记录。这是一种只适用于少量数据的技术。始终使用数据库为您进行筛选。

通常您可以这样做:

SELECT * FROM tablename WHERE domain LIKE '%example.com'

我建议您不要获取并迭代数据库中的所有记录。这是一种只适用于少量数据的技术。始终使用数据库为您进行筛选。

以下内容如何:

WHERE SUBSTRING_INDEX(domain, '.', -2) = SUBSTRING_INDEX(user_filter, '.', -2)
如果
字段始终只是域本身(没有任何前缀),则


这种方法无耻地借用了

那么下面呢:

WHERE SUBSTRING_INDEX(domain, '.', -2) = SUBSTRING_INDEX(user_filter, '.', -2)
如果
字段始终只是域本身(没有任何前缀),则


这种方法无耻地借鉴了

,您可以沿着
分割用户输入,并尝试越来越短的序列

一些类似Python的伪代码:

user_input = "www.stackoverflow.com"
split_domain = user_input.split('.')
query = 'SELECT * FROM table WHERE domain = ' + '.'.join(split_domain)
while db_returns_no_rows(query) and split_domain:
    del split_domain[0]
    query = 'SELECT * FROM table WHERE domain = ' + '.'.join(split_domain)

您可以沿
分割用户输入,然后尝试越来越短的序列

一些类似Python的伪代码:

user_input = "www.stackoverflow.com"
split_domain = user_input.split('.')
query = 'SELECT * FROM table WHERE domain = ' + '.'.join(split_domain)
while db_returns_no_rows(query) and split_domain:
    del split_domain[0]
    query = 'SELECT * FROM table WHERE domain = ' + '.'.join(split_domain)

这将解决您的问题

select * from table_name where :userParam like CONCAT('%', domain)

:userparam将为“www.example.com”

这将解决您的问题

select * from table_name where :userParam like CONCAT('%', domain)


:userparam将是“www.example.com”

是的,我知道,我不使用此代码,它是为了演示我想做什么。但是,我的案例中的用户输入位于
www.example.com
,我想检索行
example.com
,这意味着我的请求中不能包含
%example.com
,因为用户输入是
www.example.com
。我不确定我是否有道理?为什么没有
example.com
匹配
%example.com
,其中
%
仅表示“零个或多个字符”。请参阅参考。因为我无法在查询中写入
%example.com
。用户输入是过滤器,它是
www.example.com
,这意味着我可以编写如下内容:
SELECT*FROM tablename,其中的域是“%www.example.com”
,但这与
example.com
不匹配。啊,没错,我错过了。那就是用户输入的问题了。处理这个问题的最好方法是使用提取域名,如果你能找到一个库来读取你正在使用的语言的域名,或者在默认情况下去掉
www.
部分。是的,找到一个库来处理域名,并在客户端执行此操作将是另一种解决方案。是的,我知道,我不使用此代码,这是为了证明我想做什么。但是,我的案例中的用户输入位于
www.example.com
,我想检索行
example.com
,这意味着我的请求中不能包含
%example.com
,因为用户输入是
www.example.com
。我不确定我是否有道理?为什么没有
example.com
匹配
%example.com
,其中
%
仅表示“零个或多个字符”。请参阅参考。因为我无法在查询中写入
%example.com
。用户输入是过滤器,它是
www.example.com
,这意味着我可以编写如下内容:
SELECT*FROM tablename,其中的域是“%www.example.com”
,但这与
example.com
不匹配。啊,没错,我错过了。那就是用户输入的问题了。处理此问题的最佳方法是使用提取域名,如果您可以找到一个库来读取您所使用的语言的域名,或者在默认情况下删除
www.
部分。是的,找到一个库来处理域名,这样做客户端将是另一种解决方案。只是想知道你是否有www.example.com,你不能删掉www.并使用example.com作为你的输入吗。我的意思是说,情况总是这样吗?@AJP不幸的是,情况不会总是这样。用户输入可以是
static.srv1.example.com
bla.bli.meh.stackoverflow.com
;因此,我无法确定是否可以安全地进行修剪。使用客户端、javascript或服务器端、PHP来删除不需要的字符,而不是SQL。您使用的是哪种编程语言java、PHP、.net?@davidstrachan、Meeran:客户端是javascript,服务器端是Python。过滤输入,无论是服务器端还是客户端,都可能是一个不错的替代解决方案,但我更希望过滤和搜索发生在数据库上——如果可能的话。只是想知道你是否有www.example.com,你不能删掉www.只使用example.com作为你的输入吗。我的意思是说,情况总是这样吗?@AJP不幸的是,情况不会总是这样。用户输入可以是
static.srv1.example.com
bla.bli.meh.stackoverflow.com
;因此,我无法确定是否可以安全地进行修剪。使用客户端、javascript或服务器端、PHP来删除不需要的字符,而不是SQL。您使用的是哪种编程语言java、PHP、.net?@davidstrachan、Meeran:客户端是javascript,服务器端是Python。过滤输入,无论是服务器端还是客户端,都可能是一个不错的替代解决方案,但我更希望过滤和搜索发生在数据库上——如果可能的话<