从mySQL数据库中选择行并显示为列


Select rows and display as columns from mySQL database

全部,我有以下mySQL表结构:

表dj_feedback_answers:answer_id,gig_id,question_id,answer_id表dj_feedback_summary:summary_id,user_id,gig_date,tip,summary,why_poor,why_fair表dj_feedback_questions:question_id,question_value,questions_display表dj_feedback_ratings:rating_id、rating_value、rating_display

我基本上是在向用户提问,问题存储在dj_feedback_questions表中,并允许他们对每个问题进行评分。评分存储在dj_feedback_ratings中。

每个表单都可以有不同的问题,所以当我提交问题时,我会将答案存储在dj_feedback_answers中。表单上还有其他更多的静态字段,这些字段将svaed放入dj_feedback_summary中。summary_id和gig_id是连接用户提交的答案的两个表的键。

这意味着对于dj_feedback_summary表中的一行,dj_feedback _answers中可以有多行。

我想做的基本上是能够利用PHP表中的结果。所以我希望我的结果看起来像这样(假设dj_feedback_questions表中有三个问题):

summary_id、user_id、gig_date、tip、summary、why_poor、why_fair、question_1、question_2、question_32012年7月23日1,2,5,这是一个总结,很差,还可以,3,4,5

将为问题存储的值将是dj_feedback_answers中的answer_id。

我尝试创建以下查询以获取结果。这可以正常工作,但它只能显示一个问题,而不能显示所有问题。

Select dj_feedback_summary.summary_id, 
       dj_feedback_summary.user_id, 
       dj_feedback_summary.gig_date, 
       dj_feedback_summary.tip, 
       dj_feedback_summary.summary,  
       dj_feedback_answers.question_id, 
       dj_feedback_answers.rating_id, 
       dj_feedback_questions.question_value, 
       users.first_name, users.last_name, 
       dj_feedback_ratings.rating_value
from dj_feedback_summary
join dj_feedback_answers on dj_feedback_summary.summary_id=dj_feedback_answers.gig_id
join dj_feedback_questions on dj_feedback_answers.question_id=dj_feedback_questions.question_id 
join users on dj_feedback_summary.user_id=users.user_id
join dj_feedback_ratings on dj_feedback_ratings.rating_id=dj_feedback_answers.rating_id
where dj_feedback_questions.question_value='Overall Gig'
order by dj_feedback_summary.summary_id DESC

有没有一种方法可以修改我的查询,以便它可以按照我希望的方式返回我的结果?

非常感谢任何建议!

感谢

如果您需要显示多行中的值,并且它们不必在单独的列中,那么MySQL GROUP CONCAT函数可能适合您的目的。

这将使question_1question_2question_3值连接到一列中(如果我正确理解您的输出意图的话)。

更新:要进行更"真实"的透视(将不同问题的答案分为不同的列),您可以使用以下方法之一:

1)使用多个表别名:为每个问题加入dj_feedback_questions表一次,例如:

SELECT [...] FROM [...]
LEFT JOIN dj_feedback_questions q1 on q1.question_id = 1
LEFT JOIN dj_feedback_questions q2 on q2.question_id = 2
LEFT JOIN dj_feedback_questions q3 on q2.question_id = 3

然后,您需要a)类似地(多次使用别名)加入dj_feedback_answers,因为您是通过question_id到达它的,并且您希望将不同的问题分为不同的列,以及b)聚合结果并决定如何处理null,因为用常规的CCD_ 7而不是CCD_。

2)使用IF块分解为列:请参阅此SO问题(特别是已接受的答案)以获取示例:将mysql查询行转换为列