2013-03-31 2 views
0

두 가지 기능을 사용하고 있습니다. 내 질문은 두 함수의 결과를 비교하고 동일하면 결과를 숨기기

$depcourse = "SELECT * FROM organization_dep_courses odc left join course c on odc.courseid=c.id WHERE depid=$departmentid ORDER By category"; 
$dcresults = mysql_query($depcourse); 

가 어떻게 기능 # 2 그들이 경우에 표시에서 기능 # 1에서 기록을 유지 할

: 두 번째 기능은이 정보를 가져옵니다

$availcourse = "SELECT * FROM organization_courses oc left join course c on oc.courseid=c.id WHERE organizationid=$orgid ORDER By category"; 
$aresults = mysql_query($availcourse); 

: 첫 번째 기능은 다음과 같은 정보를 가져옵니다 동일하니? 두 결과의 명확한 유사점은 코스디 시드가 될 것입니다.

희망이 있습니다.

+0

'organization_courses, course'에서 읽고 다른 하나는'organization_dep_courses, course'에서 읽으면 절대 같지 않을 것입니다. 아마도 여기에 약간의 설명이 당신의 대답을 더 그럴듯하게 만들 것입니다. 그 테이블 구조는 무엇이며 어떤 종류의 비교를하려고합니까? – Havenard

+0

당신은 그들과 합류 할 수있는 별개 (*). –

+0

실제로 내가 한 양식입니다. 열 1의 양식은 기능 1의 결과, 사용 가능한 코스를 표시합니다. 2 열은 이미 할당 된 기능 2의 결과를 표시합니다. 둘 다 결과에서 courseid는 동일합니다. 내가 뭘 하려는지 courseid가 이미 열 2 (할당 된 코스)에 표시됩니다, 나는 열 1 (해당 coruses)에 표시에서 해당 데이터를 생략하고 싶습니다. – Ansipants

답변

2

organization_coursesorganization_dep_courses의 열 수가 같고 열의 순서가 같은 경우 MySQL UNION을 사용할 수 있습니다.

$query = ' 
    SELECT * 
    FROM (
    (SELECT * 
    FROM organization_courses oc 
    LEFT JOIN course c ON oc.courseid = c.id 
    WHERE organizationid = $orgid) 
    UNION 
    (SELECT * 
    FROM organization_dep_courses odc 
    LEFT JOIN course c ON odc.courseid = c.id 
    WHERE depid = $departmentid) 
) q 
    GROUP BY q.courseid 
    ORDER BY q.category 
'; 

: 귀하의 SQL 코드가 SQL Injection에 취약합니다.

+2

나중에 참조할만한 참고 사항 :이 기능이 작동하는 이유는 UNION이 중복을 필터링하기 때문입니다. 이 필터링이 일어나지 않고'UNION' 쿼리를하고 싶다면'UNION ALL'을 원할 것입니다. –

+0

감사합니다, 나는 그것에 가서 btw, SQL 주입 Aiias에 대한 감사 주셔서 감사합니다. 나는 적절한 교정을 할 것입니다! – Ansipants

+0

또한 UNIONS가 느립니다. – andho

관련 문제