2017-03-15 86 views
-1

我有以下查詢,它應該從我的數據庫(mdl_course.fullname)中提取課程列表,每個學生的名稱作爲列標題(mdl_user.username ),以及日期上,他們完成了課程(mdl_feedback_value.value):MySQL:如果查詢條件需要以表格格式顯示輸出

SELECT mdl_course.fullname, 
if(mdl_user.username = "luis.arroyo", mdl_feedback_value.value, 'No') 
As "Luis Arroyo " 

FROM `mdl_course` 
inner join mdl_feedback on mdl_feedback.course = mdl_course.id 
inner join mdl_feedback_item on mdl_feedback_item.feedback = mdl_feedback.id 
inner join mdl_feedback_value on mdl_feedback_value.item = mdl_feedback_item.id 
inner join mdl_feedback_completed on mdl_feedback_completed.id = mdl_feedback_value.completed 
inner join mdl_user on mdl_user.id = mdl_feedback_completed.userid 
WHERE 
(mdl_user.username = "luis.arroyo") 
and mdl_feedback_value.value LIKE "%/%/%" 
GROUP BY mdl_course.fullname 

所需的輸出:

Course name  Luis Arroyo  
-----------  -----------  
ECON 101   No     
ECON 112   6/30/2017   
etc. etc. 

我需要做的是名單每門課程數據庫(總共187 ),同時列出指定用戶及其日期完成課程(如果沒有,則顯示'否')。我在使用WHERE和GROUP BY子句時遇到了問題。選擇個人用戶名只會返回部分課程列表。在上述案例中,我只獲得38個結果而不是187個(Luis完成的課程)。

從WHERE子句中刪除mdl_user.username可以獲得所有187個課程的列表,但Luis的完成日期不顯示。一切都顯示爲「不」。

我不知道如何配置我的WHERE和GROUP BY子句來獲得我想要的輸出。

回答

0

使用LEFT JOIN代替INNER JOIN

不需要GROUP BY

需要使用COALESCENULL轉換爲'NO'

0

更改我的IF語句的CASE讓我期望的輸出,以保持GROUP BY一起條款。

MAX(CASE WHEN(mdl_user.username = "luis.arroyo") THEN mdl_feedback_value.value ELSE NULL END) 
As "Luis Arroyo "