【问题标题】:msyql searching a domain, without the TLD extensionmysql搜索域,没有TLD扩展名
【发布时间】:2018-09-01 11:21:36
【问题描述】:

我们如何在 mysql 中没有 TLD 的情况下搜索域,例如testdomain.com,我只想搜索testdomain 而不是.com,所以搜索test 会返回行,但搜索com 不会。

我认为它与下面的一些正则表达式类似,但不知道如何实现。

SELECT * FROM domains WHERE domain_name LIKE '%$search%'

知道如何只搜索域的那部分吗?

【问题讨论】:

  • 你试过SELECT * FROM domains WHERE domain_name LIKE '$search%'。删除第一个 % 符号。
  • 只会搜索以关键字开头的任何内容,例如如果您搜索com,它将返回类似common.net,但不会返回test.com,不会返回testcom.org
  • 如果只搜索第一个.之前的部分中的字符串,它会起作用吗?

标签: mysql sql regex search


【解决方案1】:

如果您要搜索以字符串开头的名称,则您的查询必须是:

SELECT * FROM domains WHERE domain_name LIKE '$search%'

这个查询是一个很好的查询,因为它使用索引。

添加“。”最后的字符你会发现只有全名, 这个查询也是一个很好的查询,因为它使用索引。

SELECT * FROM domains WHERE domain_name LIKE '$search.%'

否则,如果要进行部分搜索,则需要在术语前后添加 %,但在这种情况下,“com”搜索将匹配,此搜索不好,因为它不使用索引。

最后,这个表达式搜索一个包含名称但不包括 TLD 的字符串,这不是一个好的查询,因为它不使用索引。

SELECT * FROM domains WHERE domain_name LIKE '%$search%' and not like '%.$search%'

一个好主意是拆分数据库中的字段,为没有 TLD 的域名创建一列(或附加列),然后在这个新列中搜索。

【讨论】:

    【解决方案2】:

    你可以这样做:

    SELECT * FROM domains 
    WHERE SUBSTRING_INDEX(domain_name, '.', 1) LIKE '%$search%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多