您好,我有一个存储用户信息的 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/