这是我的表格:
用户表
id | name
1 | john
2 | lucy
用户帐户表
id | user_id | account_name
1 2 lucy_lu
2 1 johndoe
account_parameters 表
id | account_id | parameter_id | value
1 1 10 4000
2 1 11 1450
3 2 10 5000
4 2 11 1150
参数表
id | parameter_value | parameter_name
10 height Height
11 max_score Max Score
我要得到结果:
user_id | user_name | account_name | Height | Max Score
1 john johndoe 5000 1150
2 lucy lucy_lu 4000 1450
我搜索了“mysql generate columns with data”和类似的东西,找到了许多针对 1 或 2 个表的解决方案,但我不知道如何在此处实现这些解决方案。我知道如何选择带连接的静态字段,但我不知道如何在这个例子中选择“高度”和“最高分”。
最佳答案
如果您必须使用 SQL 执行此操作,那么使用编写 SQL 的 PHP 似乎是耦合度最低的方法。
首先,查询您的参数表并将其存储在一个数组中。
然后分三部分构建查询字符串,中间部分是动态创建的。
SELECT
user_accounts.user_id AS user_id,
user.name AS user_name,
user_accounts.account_name AS account_name,
对数组中的每条记录重复此操作(来自参数
)。
SUM(
CASE WHEN account_parameters.parameter_id = @param_id
THEN account_parameters.value
END
) AS @param_name,
使用 PHP 替换@param_id 和@param_name 值。
(注意逗号,您不希望在 SQL 的最后一行出现逗号。)
FROM
account_parameters
INNER JOIN
user_accounts
ON user_accounts.id = account_parameters.account_id
INNER JOIN
user
ON user.id = user_accounts.user_id
GROUP BY
user_accounts.user_id,
user.name,
user_accounts.account_name
注意:在 MySQL 中,您只需要GROUP BY user_accounts.user_id
,但我不建议ab在一般。
执行该动态构建的查询应该为您调整结果。
您可能需要一些上下文敏感性来确定您想要和不想包含在最终结果中的参数(使用这种结构,您似乎并不总是需要所有参数)。
关于php - 如何使用 PHP 转换规范化数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32399662/