选择任何字段中包含字符串大小写的所有行

时间:2014-05-15 18:51:17

标签: mysql

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

并非所有字段都是varchar。

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

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

编辑:

我将在PHP中执行此操作 基本上我想像这样做一些

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

2 个答案:

答案 0 :(得分: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%';

这是一个sql小提琴的链接demonstrates我正在展示的内容。

答案 1 :(得分:0)

我认为可以用更简单的方式完成。 我想我会使用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%'