【问题标题】:Using MySQL LIKE to match a whole string使用 MySQL LIKE 匹配整个字符串
【发布时间】:2011-09-26 13:29:14
【问题描述】:

我一直在 StackOverflow 和 Internet 上进行一些搜索,但运气不佳。

我有一个如下所示的网址...

nr/online-marketing/week-in-review-mobile-google-and-facebook-grab-headlines

我正在从 URL 中获取文章名称并将“-”替换为“”以提供给我:

week in review mobile google and facebook grab headlines

此时这是我对文章的所有信息,所以我需要使用它来查询数据库以获取文章的其余信息,问题来了,但这个字符串与实际标题不匹配这篇文章,这个实例的实际标题是:

Week in review: Mobile, Google+ and Facebook grab headlines

如你所见,它包含了额外的标点符号,所以我需要找到一种使用 MYSQL LIKE 来匹配文章的方法。

希望有人可以提供帮助,标准的 SELECT * FROM table WHERE field LIKE $name 不起作用,我希望找到一种方法来做到这一点,而无需拆分每个单词,但如果归根结底,那就这样吧!

谢谢。

【问题讨论】:

  • 也许使用正则表达式的方法会有所帮助。
  • 也许你可以使用Week%in%review%Mobile%Google%and%Facebook%grab%headlines? % 符号是通配符,被解释为“零个或多个字符”。
  • 我建议您也将要匹配的字符串存储在数据库中。这是一些额外的数据,但它会为您省去很多麻烦和担心边缘情况的需要。它也会更有效率。
  • @micheal mior 我正在考虑做这样的事情,我刚刚意识到这很容易做到,我认为这很困难,因为我们的系统工作方式,但我弄错了
  • @Micheal Mior,问题解决了,谢谢,我只是对提交到数据库的数据感到困惑。

标签: php mysql string sql-like


【解决方案1】:

试试 MySQL MyISAM 引擎的全文搜索。在您的情况下,查询将是:

SELECT * FROM table
WHERE MATCH (title) AGAINST ('week in review mobile google and facebook grab headlines');

这需要您将表格转换为 MyISAM。还要根据表的大小,测试查询的性能。

查看更多信息: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

【讨论】:

    【解决方案2】:

    这看起来更像是数据库设计问题...如果您使用具有不同字段的大文本作为主键的形式,可能会导致重复或同步问题。

    一个潜在的解决方案是为每个条目提供一个唯一标识符(如果 MSQL 支持,可能是一个 int 或 uniqueidentifier 字段),并使用该字段将实际的 heldine 映射到 URL。

    另一个可能的解决方案是创建一个表格,将每个标题与其 URL 相关联,并使用该表格进行查找。这会产生一些额外的开销,但会确保标题中的特殊字符永远不会影响查找过程。

    至于使用当前设计执行此操作的方法,您可以通过单独标记每个单词然后搜索包含所有标记的条目来进行某种正则表达式搜索,但我相当确定MSQL 没有在基本命令中提供此功能。

    【讨论】:

    • 问题实际上与我的 htaccess 重写条件有关,我的 URL 必须按照上面显示的方式构建,这意味着我不能包含文章的数据库 ID,否则我会很久以前,Micheal Mior 帮助我实现了简单的解决方案,我已经实现了它,现在它工作正常,无论如何谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多