【问题标题】:MySQL searching using many 'like' operators: is there a better way?MySQL 使用许多“喜欢”运算符进行搜索:有更好的方法吗?
【发布时间】:2012-04-03 09:10:12
【问题描述】:

我有一个页面,它从数据库中的表中获取所有行,然后在 HTML 表中显示这些行。 这很好用,但现在我想实现一个“搜索”功能。有一个搜索框,搜索词用空格隔开。我要让它在三个字段中搜索搜索词,“制造”、“模型”和“类型”。这三个字段是 VARCHAR(30)。

目前,如果我想使用 3 个字词(比如“酷”、“abc”和“123”)进行搜索,我的查询将如下所示。

SELECT * FROM table WHERE make LIKE '%cool%' OR make LIKE '%abc%' OR make LIKE '%123%' OR model LIKE '%cool%' OR model LIKE '%abc%' OR model LIKE '%123%' OR type LIKE '%cool%' OR type LIKE '%abc%' OR type LIKE '%123%'

这看起来真的很糟糕,如果有更多的搜索词或更多的字段要搜索,情况会变得更糟。 我的问题是:有更好的搜索方式吗?如果有,是什么?

【问题讨论】:

  • 请注意,此查询会进行全表扫描,在大表上会很慢。
  • 代码开发者也这样做吗?有没有办法加快速度?
  • 是的,REGEXP 也进行全面扫描。
  • 您可能想阅读我的演示文稿slideshare.net/billkarwin/…

标签: mysql search html-table sql-like


【解决方案1】:

使用 REGEXP 而不是喜欢

SELECT * FROM table WHERE make REGEXP 'cool|abc|123' OR model REGEXP 'cool|abc|123' OR type REGEXP 'cool|abc|123';

阅读有关 REGEXP 的更多信息

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

http://www.go4expert.com/forums/showthread.php?t=2337

【讨论】:

    【解决方案2】:

    您应该使用全文。搜一下,很简单,很实用。

    【讨论】:

      【解决方案3】:

      您可以使用 JQuery 表插件,例如 data tables 提供动态过滤功能,您可以使用它来代替冗长的 sql 命令。而且它是免费的。

      【讨论】:

      • 哇,它拥有我计划自己创建的所有功能!
      • 是的,它的质量!希望我回答了你的问题。
      • 我认为这可能有点多。无论如何,感谢您提供的酷信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 2020-11-05
      相关资源
      最近更新 更多