두 개의 다른 쿼리에서 만든 쿼리의 결과가 동일한 결과를 반환하지 않습니다.조합 된 쿼리가 다른 결과를 반환합니다.
를 쿼리
SELECT
c.fullname Course,
u.firstname First,
u.lastname Last,
u.id ID,
u.institution Company
FROM (mdl_scorm_scoes_track AS st)
JOIN mdl_user AS u ON st.userid=u.id
JOIN mdl_scorm AS sc ON sc.id=st.scormid
JOIN mdl_course AS c ON c.id=sc.course
Join mdl_user_enrolments AS uenr ON uenr.userid=u.id
Join mdl_enrol AS enr ON enr.id=uenr.enrolid
WHERE (
(st.value='incomplete' OR st.value='not attempted')
AND DATEDIFF(NOW(), FROM_UNIXTIME(uenr.timecreated)>60)
ORDER BY c.fullname, u.lastname,u.firstname, u.id
쿼리 B
SELECT
c.fullname AS Course,
u.firstname AS Firstname,
u.lastname AS Lastname,
u.id AS ID,
u.institution AS Company,
IF (u.lastaccess = 0,'never',
DATE_FORMAT(FROM_UNIXTIME(u.lastaccess),'%Y-%m-%d')) AS dLastAccess
,(SELECT DATE_FORMAT(FROM_UNIXTIME(timeaccess),'%Y-%m-%d') FROM mdl_user_lastaccess WHERE userid=u.id AND courseid=c.id) AS CourseLastAccess
FROM mdl_user_enrolments AS ue
JOIN mdl_enrol AS e ON e.id = ue.enrolid
JOIN mdl_course AS c ON c.id = e.courseid
JOIN mdl_user AS u ON u.id = ue.userid
LEFT JOIN mdl_user_lastaccess AS ul ON ul.userid = u.id
WHERE ul.timeaccess IS NULL AND (DATEDIFF(NOW(), FROM_UNIXTIME(ue.timecreated))>60)
ORDER BY u.id, c.fullname
나는 쿼리 C로를 결합했다 나의 논리가 쿼리 C. 쿼리에서 잘못된
SELECT
c.fullname AS Course,
u.firstname AS Firstname,
u.lastname AS Lastname,
u.id AS IDNumber,
u.institution AS Institution,
IF (u.lastaccess = 0,'never',
DATE_FORMAT(FROM_UNIXTIME(u.lastaccess),'%Y-%m-%d')) AS dLastAccess
,(SELECT DATE_FORMAT(FROM_UNIXTIME(timeaccess),'%Y-%m-%d') FROM mdl_user_lastaccess WHERE userid=u.id AND courseid=c.id) AS CourseLastAccess
FROM mdl_user_enrolments AS ue
JOIN mdl_enrol AS e ON e.id = ue.enrolid
JOIN mdl_course AS c ON c.id = e.courseid
JOIN mdl_user AS u ON u.id = ue.userid
LEFT JOIN mdl_user_lastaccess AS ul ON ul.userid = u.id
WHERE (ul.timeaccess IS NULL OR ue.userid IN
(SELECT u.id
FROM (mdl_scorm_scoes_track AS st)
JOIN mdl_scorm AS sc ON sc.id=st.scormid
WHERE c.id=sc.course AND st.userid=u.id AND (st.value='incomplete' OR st.value='not attempted')
)
)AND (DATEDIFF(NOW(), FROM_UNIXTIME(ue.timecreated))>60)
ORDER BY c.fullname, u.lastname,u.firstname
내가 발견하지 않았습니다 C는 A 또는 B에서 찾을 수없는 잘못된 레코드를 추가하고 두 경우에 항목을 복제합니다.
나는 2를 결합하는 것에 대한 나의 논리가 어긋나는 곳에서 몇 가지 조언을 원합니다.
이 게시물에서 쉼표가 수정되었으므로 실제 쿼리에 포함되었습니다.
내 일정은 코스에 등록되었지만 일정 기간 내에 시스템에 로그인하지 않았고 코스에 액세스하고 코스에서 활동을 완료하지 않은 모든 사용자를 나열하는 것입니다.
그래서 내가 찾고 있어요 논리는 다음과 같습니다 사용자가 60 일 이내에 로그인하지 않은 경우 - 표시 이름 에 기록하지만, 60 일 이내에 과정에 액세스하지 않은 경우 - 표시 이름 을 로그인 한 경우 및 액세스 한 과정은 완료했지만 과정 활동을 완료하지 않음 - 표시 이름검색어 A는 활동을 시작했지만 60 일 이내에 완료되지 않은 모든 사용자를 나열합니다. 검색어 B는 로그인하지 않았거나 코스에 액세스 한 모든 사용자를 나열합니다 60 일
모든 3 조건을 만족시키기 위해 2 개의 쿼리를 결합하려고 시도하는 중 이온은 내가 문제가있는 곳입니다. 처음에는 UNION을 시도했지만 작동시키지 못했습니다.
쿼리 A의 두 번째 줄과 쿼리 B의 여섯 번째 줄에 쉼표가 누락되었습니다. – Rachcha
@ Rachcha - 누락 된 쉼표를 지적 해 주셔서 감사합니다. 나는 실제적인 질문이 맞았지만 그 글을 바로 잡았다. –