如何从多态MySQL表中检索数据
我在MySQL中有三个表:如何从多态MySQL表中检索数据,mysql,sql,polymorphic-associations,Mysql,Sql,Polymorphic Associations,我在MySQL中有三个表:应用程序,问题,和问题_答案 应用程序存储用户id问题存储问题id和问题类型(即名称、NRIC、学校名称)问题\u答案存储答案参考用户id和问题id 据我所知,这种类型的关联称为多态关联。现在我不知道如何从不同的问题id中检索数据,并将它们改为列标题 我希望这是有道理的 编辑: 为了进行说明,以下是相应的表格: 应用程序: user_id name ------------------------------- 100 Leon
应用程序
,问题
,和问题_答案
应用程序
存储用户id
<代码>问题存储问题id
和问题类型
(即名称、NRIC、学校名称)<代码>问题\u答案存储答案
参考用户id
和问题id
据我所知,这种类型的关联称为多态关联。现在我不知道如何从不同的问题id中检索数据,并将它们改为列标题
我希望这是有道理的
编辑:
为了进行说明,以下是相应的表格:
应用程序
:
user_id name
-------------------------------
100 Leon Barnacles
101 Richard Kennard
102 Fareeza Salleh
问题
:
question_id question_name
---------------------------------------------
20 NRIC
21 Have you ever applied to TFM?
22 What's your current GPA?
23 Name of school
问题\u答案
:
question_id user_id answer
------------------------------------------------
20 100 880808-06-8990
20 100 900990-14-0911
23 102 SMK Taman Pandamaran
我希望得到的是:
Name NRIC Name of school
------------------------------------------------------------
Leon Barnacles 880808-06-8990
Richard Kennard 900990-14-0911
Fareeza Salleh SMK Taman Pandamaran
您需要的是一个
PIVOT
类型的函数,MYSQL不支持像SQL Server或Oracle这样的PIVOT。您可以使用以下脚本在问题表数据上使用max和case
来实现pivot
select group_concat(concat('max(case when question_id = ''', question_id, ''' then
answer end) as `', question_name ,'`')) into @sql from tfm_questions;
set @sql =
concat('select full_name, ', @sql, ' from
(
select a.full_name, q.question_name, an.answer, q.question_id
from tfm_application a
inner join tfm_questions_answer an on a.user_id = an.user_id
inner join tfm_questions q on an.question_id = q.question_id
) x
group by full_name');
select @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
我一直在
声明时遇到语法错误。它需要额外的语法才能工作吗?仍然得到相同的消息:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册…
@Khairul,您能用示例表和数据创建吗