全部, 我有以下mySQL表结构:
Table dj_feedback_answers: answer_id, gig_id, question_id, answer_id Table dj_feedback_summary: summary_id, user_id, gig_date, tip, summary, why_poor, why_fair Table dj_feedback_questions: question_id, question_value, question_display Table dj_feedback_ratings: rating_id, rating_value, rating_display
我基本上是在询问用户问题,问题存储在dj_feedback_questions表中,并允许他们为每个问题提供评分。评级存储在dj_feedback_ratings中。
每个表单都有可变的问题所以当我提交问题时,我将答案存储在dj_feedback_answers中。表单上还有其他更多的静态字段,并且这些字段会进入dj_feedback_summary。 summary_id和gig_id是连接两个表以获取用户提交的答案的键。
这意味着dj_feedback_umwers中dj_feedback_summary表中的单行可以有多行。
我想要做的是基本上能够在PHP表中使用结果。所以我希望我的结果看起来像这样(假设dj_feedback_questions表中有三个问题):
summary_id, user_id, gig_date, tip, summary, why_poor, why_fair, question_1, question_2, question_3 1, 2, 07/23/2012, 5, This is a summary, It was poor, It was fair, 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
有没有办法修改我的查询,以便它可以返回我想要的结果?
非常感谢任何建议!
由于
答案 0 :(得分:1)
如果您需要显示多行的值,并且它们在不同的列中并不重要,那么MySQL GROUP CONCAT function可能适合您的目的。
这会将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)汇总结果并决定如何处理空值,因为定期JOIN
而不是LEFT JOIN
将导致您丢失任何缺少一个或多个问题答案的摘要的行。< / p>
2)使用IF
块进入列:请参阅此SO问题(特别是已接受的答案)以获取插图:Transpose mysql query rows into columns