1

所有,我有以下 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、question_display
表 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_summary 表中的单行,dj_feedback_answers 中可以有多行。

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

summary_id、user_id、gig_date、小费、总结、why_poor、why_fair、question_1、question_2、question_3
1, 2, 07/23/2012, 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

有没有办法修改我的查询,以便它可以返回我想要的结果?

任何意见是极大的赞赏!

谢谢

4

1 回答 1

1

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

这将使您question_1,question_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) 汇总结果并决定如何处理空值,因为执行常规JOIN而不是 aLEFT JOIN将导致您丢失任何缺少一个或多个问题答案的摘要的行。

2)用IF块分成列:参见这个SO问题(特别是接受的答案)以获得说明:Transpose mysql query rows into columns

于 2012-07-23T19:53:21.963 回答