示例:我有一个包含 5 个字段的表,名为 id、field_1、field_2、field_3、field_4 我正在所有领域搜索“foo”。
SELECT ID FROM table WHERE field_1 LIKE ('%foo%') OR field_2 LIKE ('%foo%') OR ...
我想返回 ID,以及在哪些字段中找到该术语。
最有效的方法是什么?
注意:我正在寻找一种可以动态容纳添加新数据库字段的解决方案,而无需手动更新 SQL。
最佳答案
一种可能的方法是将这些匹配映射到返回的列中:
SELECT ID,
field_1 LIKE '%foo%' AS field_1_match,
field_2 LIKE '%foo%' AS field_2_match
...
...因此您只需检查每个相应的 column_match
值即可知道它是否匹配。
使用 CONCAT_WS
可以很容易地将其扩展为返回带有列的字符串(例如,由 ,
分隔):
SELECT ID,
CONCAT_WS(',',
IF(field_1 LIKE '%foo%', 'field_1', NULL),
IF(field_2 LIKE '%foo%', 'field_2', NULL)
...
)
...但是,老实说,我怀疑处理这种格式的数据会更容易。
关于mysql - 使用 PHP 返回找到搜索词的列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736133/