2014-12-11 2 views
0

나는 다른 Q & A의 것을 보았고 나의 시나리오를 보지 못했다.이 이중 mysql 조인에서 중복을 제거하려면 어떻게합니까?

내 복제가 이상합니다. 로그인 된 관리자마다 다른 사용자의 수에 따라 중복되는 양이 달라집니다.

SELECT user_groups.*, user_table.*, my_quotes.* 
FROM user_groups 
RIGHT JOIN user_table 
ON user_table.usergroup = user_groups.groupid 
RIGHT JOIN my_quotes 
ON my_quotes.groupid = user_groups.groupid 

my_quotes의 결과를 표시해야하지만 다른 테이블의 다른 정보도 표시해야합니다.

견적은 사용자 및 관리자에게 속합니다. 관리자가 사용자에 대한 견적을 작성하지만 관리자가 관리하는 다른 사용자가있을 경우, 위의 조회의 견적 테이블은 견적이 단 한 명의 사용자에 속하더라도 모든 사용자에 대한 견적을 표시합니다.

관리자 아래에 2 명의 사용자가 있다고 가정 해 보겠습니다. 사용자 1은 견적을 가지고 사용자 2는 견적을 가지고 있습니다. 따옴표 mysql 테이블에만 2 레코드를 가질 수 있도록 html 테이블은 2 레코드를 표시해야하지만 대신 4 레코드를 표시합니다. 견적 1의 경우 2, 견적 2의 경우 2

이제 다른 사용자가 관리자 아래에 추가되었다고 가정 해 봅시다. html 테이블은 각 따옴표에 대해 3 개의 레코드를 표시합니다. 이상해.

다음은 작동하지 않습니다

SELECT DISTINCT user_groups.*, user_table.*, my_quotes.* 
FROM user_groups 
RIGHT JOIN user_table 
ON user_table.usergroup = user_groups.groupid 
RIGHT JOIN my_quotes 
ON my_quotes.groupid = user_groups.groupid 

user_groups :

groupid, name, userid 

user_table :

userid, username, email, usergroup, name, company, address, phone, manager, client 

my_quotes :

id, userid, groupid, clientname, ponumber, date, postage, qty, price, total, approved 

몇 개의 테이블에 게시 할 필드가 너무 많습니다. 나는 단지이 문제에 관련된 것들을 넣었다.

답변 중 하나가 도움이되었지만 여전히 문제가 있습니다. 보시다시피, 로그인 한 사용자가 admin, manager 또는 client 인 경우에 따라 3 가지 다른 조회가 있습니다. 관리자와 클라이언트는 올바른 레코드를 표시하고 관리자는 거의 수행하지만 관리자에게는 누락 된 레코드가 있습니다.

if($_SESSION['usergroup']==1) { 

    $tableresult = mysql_query(' 

     SELECT user_groups.*, user_table.*, my_quotes.* 
     FROM user_groups 
     RIGHT JOIN user_table 
     ON user_table.usergroup = user_groups.groupid 
     RIGHT JOIN my_quotes 
     ON my_quotes.userid = user_table.userid 

    ') or die(mysql_error()); 

} else if($manager==1) { 

    $tableresult = mysql_query(' 

     SELECT user_groups.*, user_table.*, my_quotes.* 
     FROM user_groups 
     RIGHT JOIN user_table 
     ON user_table.usergroup = user_groups.groupid 
     RIGHT JOIN my_quotes 
     ON my_quotes.userid = user_table.userid 
     WHERE user_groups.userid='.$_SESSION['userid'].' 

    ') or die(mysql_error()); 

} else { 

    $tableresult = mysql_query(' 

     SELECT my_quotes.*, user_table.* 
     FROM my_quotes 
     INNER JOIN user_table 
     ON my_quotes.userid = user_table.userid 
     WHERE user_table.userid = '.$_SESSION['userid'].' 
     AND (approved = 1 OR approved = 2) 

    ') or die(mysql_error()); 

} 

답변

2

에 따르면 따옴표는 사용자의 ID와 관련되어 있으므로 사용자가 그룹이 아닌 사용자 ID로 join을 입력해야합니다. 관리자에 대한

SELECT user_groups.*, user_table.*, my_quotes.* 
FROM user_groups 
RIGHT JOIN user_table 
ON user_table.usergroup = user_groups.groupid 
RIGHT JOIN my_quotes 
ON my_quotes.userid = user_table.userid 

새로운 답 : (관리자는 모든 따옴표를 볼 수는)

SELECT user_table.*, my_quotes.* 
FROM user_table 
RIGHT JOIN my_quotes 
ON my_quotes.userid = user_table.userid //this will grab all the quotes 
+0

user_table에는 id가 없지만 이것은 사소한 일입니다. 나는 그것이 작동하지 않는다고 말할 것 같았지만 user_group을 user_table로 바꾼 것으로 나타났습니다. 이것은 효과가있는 것 같습니다. 감사. 또한 나는 당신이 당신의 대답을 바꾼 것을 보았습니다,하지만 제 대답을 여기에서 편집하는 기분이 들지 않았습니다. – leoarce

+0

그냥 따옴표 목록에 누락 된 레코드가 있음을 알았습니다. 왜 그런지 모르겠다. 3 개의 쿼리가 있습니다.하나는 관리자 용이고 다른 하나는 관리자 용이고 다른 하나는 사용자 용입니다. 사용자는 자신의 것을 볼 수 있습니다. 관리자는 자신의 모든 사용자를 봅니다. 관리자는 모든 관리자의 모든 사용자에 대한 모든 인용문을 확인해야합니다. 관리자 하나와 사용자 하나는 옳은 것처럼 보이지만 관리자는 아닙니다. 제 질문을 편집하여 의심스러운 것을 볼 수 있습니다. – leoarce

+0

admin 1, 2 또는 3에 대한 쿼리를 알려주시겠습니까 ?? – NULL

1
SELECT DISTINCT user_groups.*, user_table.*, my_quotes.* 
FROM user_groups 
RIGHT JOIN user_table 
ON user_table.usergroup = user_groups.groupid 
RIGHT JOIN my_quotes 
ON my_quotes.groupid = user_groups.groupid 

사용 별개의 또는 더 나은 코딩.

+0

나는 내가 DISTINCT하려고 말을 잊고 작동하지 않습니다. – leoarce

+0

테이블 구조를 게시하십시오. – Hituptony

관련 문제