MYSQL 枢轴关键字搜索

标签 mysql sql pivot-table

您好,我有一个存储用户信息的 mysql 表,表的每一行存储一列数据。

这里是数据样本

dataId    FieldName    FieldData
63        SJMID        CP345223
63        Username     CP345223
63        email        test@test.com
63        Name         Danny Younes

下面是pivot SQL

SELECT 
  sso2.dataId, 
  MAX(IF(sso2.fieldName = 'SJM ID', sso2.fieldData, NULL)) AS 'SJM ID' , 
  MAX(IF(sso2.fieldName = 'Username', sso2.fieldData, NULL)) AS 'Username' , 
  MAX(IF(sso2.fieldName = 'Email', sso2.fieldData, NULL)) AS 'Email',
  MAX(IF(sso2.fieldName = 'Name', sso2.fieldData, NULL)) AS 'Name'
FROM
  users_table sso2
  GROUP BY sso2.dataId

返回给我的数据如下:

dataId    SJMID    Username    Email          Name
63        CP345223 CP345223    test@test.com  Danny Younes

当我在查询中输入关键字搜索时,假设我在每个字段中搜索数字 522,将返回以下数据:

 dataId    SJMID    Username    Email   Name
    63     CP345223 CP345223    NULL    NULL

它只返回找到结​​果的数据,其他所有数据均返回 null。我希望查询返回用户的所有数据。我一直在为此绞尽脑汁,我使用了 Case 语句,它们似乎可以工作,但在非常大的数据库上的性能很糟糕。

这是关键字搜索的查询

SELECT 
      sso2.dataId, 
      MAX(IF(sso2.fieldName = 'SJM ID', sso2.fieldData, NULL)) AS 'SJM ID' , 
      MAX(IF(sso2.fieldName = 'Username', sso2.fieldData, NULL)) AS 'Username' , 
      MAX(IF(sso2.fieldName = 'Email', sso2.fieldData, NULL)) AS 'Email',
      MAX(IF(sso2.fieldName = 'Name', sso2.fieldData, NULL)) AS 'Name'
    FROM
      users_table sso2
    WHERE
      sso2.fieldData COLLATE UTF8_GENERAL_CI LIKE '%522%'
    GROUP BY 
      sso2.dataId

那么如何取回关键词搜索匹配到的用户的所有数据

提前致谢 丹尼尤尼斯

最佳答案

在这种情况下,您需要根据 dataId 执行SELF JOIN

SELECT 
      sso2.dataId, 
      MAX(IF(u.fieldName = 'SJMID', u.fieldData, NULL)) AS 'SJM ID' , 
      MAX(IF(u.fieldName = 'Username', u.fieldData, NULL)) AS 'Username' , 
      MAX(IF(u.fieldName = 'Email', u.fieldData, NULL)) AS 'Email',
      MAX(IF(u.fieldName = 'Name', u.fieldData, NULL)) AS 'Name'
FROM users_table sso2
INNER JOIN users_table u on u.dataId = sso2.dataId
WHERE sso2.fieldData COLLATE UTF8_GENERAL_CI LIKE '%522%'
GROUP BY sso2.dataId

关于MYSQL 枢轴关键字搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49187579/

相关文章:

php - 如何使用mysql统计每天的一条记录

mysql - 分组并选择最大对 SQL

sql - 选择带有表别名的 SQL View Slow

php - 尝试通过php输出我的数据库中最富有的用户

excel - 来自多个电子表格的数据透视表

excel - 如何在 VBA 中将过滤器应用于我的数据透视图

php - 如何查找特定日期是否位于数据库中的两个日期之间?

mysql - 使用 case 语句 mysql 将字段添加到字段列表

mysql - 将一列的结果添加到另一列

c# Excel 数据透视表中的折叠字段