【问题标题】:MySQL: Select rows where a column is part of a given stringMySQL:选择列是给定字符串一部分的行
【发布时间】:2016-09-01 15:39:59
【问题描述】:

我正在寻找一种方法来在我的表格条目中找到给定字符串的一部分。 字段为表中的varchar。

搜索

/brands/brand/actona/kitchen-article/item/01945

并且想找到这一行:

/brands/brand/actona/$

- 或者也许这一行

/brands/brand/actona/kitchen-$

有没有办法解决这个问题?问题是该表至少有 57k 个条目。我从一个旧的(太大的)nginx-config 文件中导入数据,这些文件都是永久重定向。

更新: 我需要一个与“LIKE”大致相反的东西,因为我搜索的字符串的一部分存储在带有通配符($)的表中,它也可以匹配另一个以相同开头的字符串。 /brands/brand/actona/$ 可以匹配 /brands/brand/actona/123 也可以匹配 /brands/brand/actona/abc/def

所以当我搜索/brands/brand/actona/abc/def 甚至/brands/brand/actona/abc/def/xyz 时,它需要匹配/brands/brand/actona/$ 的行

我实际上尝试从 nginx.config 文件中外包 57k 永久重定向,以避免在每个请求上检查 6MB 配置文件。

我很抱歉我糟糕的英语:(

【问题讨论】:

  • 您的问题不清楚。你想搜索什么,你在哪里搜索?请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example
  • 看看LIKE
  • 列是给定字符串的一部分是什么意思。您给出的示例清楚地表明您希望在/brands/brand/actona/ 之后找到任何匹配值,因此您应该使用select * from table where column_name like '/brands/brand/actona/%';。希望这会有所帮助。
  • 代码中的$ 字符是什么?

标签: php mysql sql regex wildcard


【解决方案1】:

可能是这样的

SELECT * FROM TABLE
WHERE '/brands/brand/actona/kitchen-article/item/01945'
LIKE CONCAT('%', URLCOLUMN, '%');

【讨论】:

  • 这与给出的两个示例不匹配,因为 $
  • 啊,是的,我真的要问 OP $ 的原因,它是作为正则表达式运算符吗?还是OP有钱? xD
  • $ 是通配符。
  • 我需要一个与“LIKE”大致相反的东西,因为我搜索的字符串的一部分存储在带有通配符的表中,它也可以匹配另一个以相同开头的字符串。 /brands/brand/actona/$ 可以匹配 /brands/brand/actona/123 也可以匹配 /brands/brand/actona/abc/def
  • @leptoquark,我给你的东西会起作用的。
【解决方案2】:

这样的事情怎么样?

SELECT * FROM table
WHERE
column REGEXP '(/[a-zA-Z0-9-]+)+\$?'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多