mysql - 在 MATCH() AGAINST() 中查找匹配列的名称或别名

标签 mysql sql mariadb

我正在使用 MATCH() AGAINST() 在我的数据库中进行全文搜索。因为我想要来自多个表的数据,所以我创建了一个 VIEW 并在 MARIADB 中使用以下查询格式,

SELECT 
DAT1, DAT2, DAT3 
FROM VIEW1
WHERE 
MATCH (COL1) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) OR
MATCH (COL2) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) OR
MATCH (COL3) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE)

一切正常,但我正在查询中寻找附加输出,那就是我在其中找到搜索结果的列名

如何在查询输出中获取匹配字符串的名称或别名COL1COL2COL3

最佳答案

您可以在 select 中使用 case 表达式:

SELECT DAT1, DAT2, DAT3,
       CONCAT_WS(',',
                 (CASE WHEN MATCH(COL1) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 THEN 'col1' END),
                 (CASE WHEN MATCH(COL2) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 THEN 'col2' END),
                 (CASE WHEN MATCH(COL2) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 THEN 'col3' END)
                ) as cols
FROM VIEW1
WHERE MATCH (COL1) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 OR
      MATCH (COL2) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0 OR
      MATCH (COL3) AGAINST ('lisa mona aachen' IN NATURAL LANGUAGE MODE) > 0;

关于mysql - 在 MATCH() AGAINST() 中查找匹配列的名称或别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464667/

相关文章:

php - 在 PHP/MySQL 中保存和转换时区

sql - 是否有任何抽象层可以与 GFS 或 HDFS 一起使用?

mariadb - 为什么表 DATABASECHANGELOG 上没有索引和/或 PK?

php - 如何在 PHP PDO 中使用 if 语句执行准备语句?

mysql - 关系数据库和 MyIsam

MySQL:按类别计数项目

mysql - 在给定 sql 查询的情况下转换 Rails 中的复杂查询

java - 在 jooq 中选择二进制(16),但显示十六进制字符串

mysql - 删除重复的行(已搜索并尝试过此处的内容)

PHP表单验证提交问题