2016-12-20 4 views
1

I 2 Benutzerprofilfeldern Mitarbeiter-ID erstellt haben (Kurzbezeichnung: Employeeid) Organisation (Kurzname: Organisation)SQL Moodle Profil-Felder mit

Hier ist mein Code:

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 

Die Ergebnisse in Die Tabelle ist vollkommen in Ordnung, aber wenn ich die Filter anwende, die ich habe (zB: Nach Organisation filtern, was ein Drop-down ist), werden die Daten in der Employee-Spalte entfernt, aber die anderen Daten in anderen Spalten angezeigt.

Wenn ich den Suchtext-Filter für Mitarbeiter-ID verwenden, sind die Daten in Organisation verschwunden.

Gibt es eine Möglichkeit, das zu verhindern? Hilfe bitte. Vielen Dank.

PS: Ich habe die SQL-Abfrage in Moodle Konfigurierbare Berichte bin mit

Antwort

2

Sie haben mehr Erfolg mit der folgenden für die Erstellung von:

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

Hallo Danke für diesen wirklich super. machte nur eine kleine Änderung in den Filtern %% FILTER_USERS: org.data %% %% FILTER_SEARCHTEXT: employee.data: ~ %% ​​ Sie so viel Dank. Ich wünsche dir so viel frohe Weihnachten und ein glückliches neues Jahr @davosmith – Nightshade