【问题标题】:select all raws that contain a string case in any filed选择任何字段中包含字符串大小写的所有行
【发布时间】:2014-07-04 09:13:00
【问题描述】:

我有一个名为 main 的 mysql 表,我想选择在任何字段中包含字符串的所有行。

并非所有字段都是 varchar。

我为现场硬件执行此操作,但我希望能够在所有字段中进行搜索,并且尽可能不指定它们的名称,因为现在有 12 个字段并且它们的数量可能会增加。

SELECT * FROM main WHERE hardware LIKE "%string%"

编辑:

我将在 PHP 中执行此操作 基本上我想做这样的事情

SELECT * FROM main WHERE at_least_one_field LIKE "%string%"

【问题讨论】:

  • 您是如何以及为什么这样做的?我猜这个问题的最佳答案取决于你使用什么样的工具来执行查询。
  • 我将在 PHP 中执行此操作,但如果可能,我希望接收已过滤的数据。

标签: mysql


【解决方案1】:

正如 Ejay 的评论中提到的,全文搜索是最好的方法。我没有意识到自从 5.6 全文对 InnoDB 表起作用。

如果您不能使用全文搜索,则以下内容适用于较小的数据集,但它根本无法很好地扩展。

可能不是最有效的方法,但是创建一个将所有不同字段联合在一起的视图怎么样。

CREATE view searchTerms ...
SELECT id, field1 as SearchValue FROM main 
UNION 
SELECT id, field2 from main
... etc

然后将视图链接到主表

SELECT m.* 
FROM main m 
    LEFT JOIN searchTerms s ON m.id = s.id
WHERE s.SearchValue like '%stringToSearch%';

这是一个指向我正在展示的demonstrates 的 sql fiddle 的链接。

【讨论】:

    【解决方案2】:

    我认为可以以更简单的方式完成。 我想我会用this solution

    SELECT * FROM clients
    WHERE field1 LIKE '%search%'
       OR field2 LIKE '%search%'
       OR field3 LIKE '%search%'
       OR field4 LIKE '%search%'
       ....
       OR fieldX LIKE '%search%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2023-03-19
      • 1970-01-01
      • 2015-02-06
      • 2023-03-25
      • 2011-01-08
      相关资源
      最近更新 更多