我有一个名为main的 mysql 表,我想在任何字段中选择包含字符串的所有行。
并非所有字段都是varchar。
我为现场硬件执行此操作,但我希望能够搜索所有字段,如果可能的话不指定其名称,因为现在有12个字段,它们的数量可能会增加。
SELECT * FROM main WHERE hardware LIKE "%string%"
编辑:
我将在PHP中执行此操作 基本上我想像这样做一些
SELECT * FROM main WHERE at_least_one_field LIKE "%string%"
答案 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%'