Mysql SQL:查找以给定字符串结尾的DB项
我需要执行一个SQL请求来提取一些数据。我不确定这是否可能,如果可能,我不知道怎么做。我相信用一个例子更好地说明我想做什么 让我们假设一个非常简单的表:Mysql SQL:查找以给定字符串结尾的DB项,mysql,sql,Mysql,Sql,我需要执行一个SQL请求来提取一些数据。我不确定这是否可能,如果可能,我不知道怎么做。我相信用一个例子更好地说明我想做什么 让我们假设一个非常简单的表: -------------------------- | ID | domain | -------------------------- | 1 | example.com | -------------------------- | 2 | stackoverflow.com | -----------
--------------------------
| 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。过滤输入,无论是服务器端还是客户端,都可能是一个不错的替代解决方案,但我更希望过滤和搜索发生在数据库上——如果可能的话<