2016-12-20 8 views
1

я создал 2 пользовательские поля профиля Employee ID (короткое_имя EmployeeID) организация (короткое_имя организация)SQL Moodle с помощью пользовательских полей профиля

Вот мой код:

SELECT 
     MAX(CASE WHEN f.shortname = 'employeeid' THEN uid.data ELSE '' END) AS 'Employee No.', 
    CONCAT(u.firstname,' ',u.lastname) AS 'Full Name', 
    CONCAT('<a target="_new" href="%%WWWROOT%%/user/profile.php?id=',u.id,'">', u.username,'</a>') AS 'User Name', 
     MAX(CASE WHEN f.shortname = 'Organisation' THEN uid.data ELSE '' END) AS 'Organisation', 
    c.fullname AS 'Course', 
DATE_FORMAT(FROM_UNIXTIME(p.timeenrolled),'%m/%d/%Y') AS 'Enrollment Date', 
DATE_FORMAT(FROM_UNIXTIME(p.timecompleted),'%m/%d/%Y') AS 'Completion Date', 
DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(p.timecompleted),INTERVAL 1 YEAR), '%m/%d/%Y') AS 'Expiration Date' 

FROM prefix_course_completions AS p 
JOIN prefix_course AS c ON p.course = c.id 
JOIN prefix_user AS u ON p.userid = u.id 
JOIN prefix_user_info_data AS uid ON uid.userid = u.id 
JOIN prefix_user_info_field f ON uid.fieldid = f.id 

WHERE f.shortname IN ('employeeid', 'Organisation') IS NOT NULL 

%%FILTER_COURSES:Course%% 
%%FILTER_USERS:uid.data%% 
%%FILTER_SEARCHTEXT:uid.data:~%% 
GROUP BY u.id 

Результаты в таблица отлично подходит, но всякий раз, когда я применяю фильтры, которые у меня есть (например, Filter by Organization, который является ниспадающим), он удаляет данные в столбце Employee Column, но все равно отображает другие данные в других столбцах.

Если я использую фильтр поискового текста, который предназначен для идентификатора сотрудника, данные в Организации будут удалены.

Есть ли способ предотвратить это? Помощь pls. Благодарю.

PS: Я использую конфигурируемые отчеты для создания SQL-запроса в Moodle

ответ

2

Вы можете иметь больше успеха со следующим:

SELECT 
    employee.data AS 'Employee No.', 
CONCAT(u.firstname,' ',u.lastname) AS 'Full Name', 
CONCAT('<a target="_new" href="%%WWWROOT%%/user/profile.php?id=',u.id,'">', u.username,'</a>') AS 'User Name', 
    org.data AS 'Organisation', 
c.fullname AS 'Course', 
DATE_FORMAT(FROM_UNIXTIME(p.timeenrolled),'%m/%d/%Y') AS 'Enrollment Date', 
DATE_FORMAT(FROM_UNIXTIME(p.timecompleted),'%m/%d/%Y') AS 'Completion Date', 
DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(p.timecompleted),INTERVAL 1 YEAR), '%m/%d/%Y') AS 'Expiration Date' 

FROM prefix_course_completions p 
JOIN prefix_cours c ON p.course = c.id 
JOIN prefix_user u ON p.userid = u.id 
LEFT JOIN (
    SELECT d.userid, d.data 
    FROM prefix_user_info_data d 
    JOIN prefix_user_info_field f ON f.id = d.fieldid AND f.shortname = 'employeeid' 
) employee ON employee.userid = u.id 
LEFT JOIN (
    SELECT d.userid, d.data 
    FROM prefix_user_info_data d 
    JOIN prefix_user_info_field f ON f.id = d.fieldid AND f.shortname = 'Organisation' 
) org ON org.userid = u.id 

WHERE 1=1 

%%FILTER_COURSES:Course%% 
%%FILTER_USERS:employee.data%% 
%%FILTER_SEARCHTEXT:org.data:~%% 
+0

Привет Спасибо за это действительно супер. Просто сделал небольшое изменение в фильтрах %% FILTER_USERS: %% org.data %% FILTER_SEARCHTEXT: employee.data: ~ %% ​​ Спасибо так много. Я желаю вам очень веселого Рождества и счастливого нового года @ davosmith – Nightshade