全部,我有以下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_1
、question_2
和question_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查询行转换为列