代码之家  ›  专栏  ›  技术社区  ›  Cruachan

如何清理此SELECT查询?

  •  2
  • Cruachan  · 技术社区  · 16 年前

    SELECT ... FROM table WHERE
      LCASE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
        strSomeField, ' ', '-'), ',', ''), '/', '-'), '&', ''), '+', '')
      ) = $somevalue
    

    5 回复  |  直到 15 年前
        1
  •  3
  •   bobince    16 年前

    在应用层进行替换,数据库中不需要该逻辑。让它成为一个普通的PHP函数。

    埃塔:啊,我明白你的意思了。那么,你就被塞满了,剩下的就是数据库本来就不应该被构造成需要这样的选择!:-)你 可以 将REPLACE移到存储的生产环境中( CREATE FUNCTION )...这肯定会使查询看起来更好,但这实际上是在掩盖问题,因为它仍然需要扫描和处理整个表才能进行SELECT查询。我不认为如果不改变模式,你会做得更好,抱歉。

        2
  •  2
  •   GEOCHET S.Lott    16 年前

    查看正则表达式库:

    明确地:

    REGEXP_REPLACE?(text, pattern, replace ...)
    
        3
  •  1
  •   Chad Birch    16 年前

    哦,天哪,那真有趣。以下是它对strSomeField的作用总结:

    在MySQL中,如果不添加MarkusQ链接的regexp_replace用户定义函数,就很难做到这一点,我认为这将需要MySQL重新编译。

        4
  •  0
  •   Matt K    16 年前

        5
  •  0
  •   Your Common Sense    15 年前

    作为URI参数传递。

    哦。同样的陷阱一次又一次。

    你不觉得这样的作家比你经验少吗?
    但是看看SO问题网址:
    /how-can-i-clean-清洁-选择-查询
    他们使用数字键,其余的只是为了装饰。
    因此,可以随时编辑名称,但页面将保持不变。当然,没有像你这样的问题。

    这不是数据库的问题。这是设计问题。错我会说。

    推荐文章