mysql - 使用 PHP 返回找到搜索词的列名称

标签 mysql sql search

示例:我有一个包含 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/

相关文章:

java - 将嵌入式数据库与远程数据库同步

mysql - 数据库设计 SQL 和转换表

mysql - 获取前几年同一天的信息

php - 在 SELECT 语句中返回嵌套的行数组?

vb.net - 如何在 VB.net 应用程序中查找并替换 Word 文档页脚中的文本?

mysql - 使用 SELECT 和一些 DEFAULT 值插入 INTO

mysql - 使用表 B 中的所有新条目更新表 A,并通过 B 更新 A 中的现有条目

mysql - 使用 MySQL 的时间间隔 SQL 查询

php - 如何使用仅返回具有特定字段值的行的 MATCH AGAINST 方法搜索 MySQL 数据库?

vba - 在过滤器中使用 "Or"