2016-07-11 2 views
-1

나는 바로 그 지점에 가려고 노력할 것이다. 여기 내가하려는 일이있다.하나의 작업에 대한 세 가지 MySQL 쿼리!? 나는 생각하지 않는다.

SELECT * FROM userstable WHERE id = userid (in memberships table) -- AND/OR -- WHERE id = userid IF groupid is associated with templateid, and templateid is equal to $currenttemplateid 

또는 인간의 발언에 : 다음 memberships 테이블과 경우 봐

membershipstable = || groupid || templateid || userid 
        || 2 ||  1  || 0 
        || 0 ||  1  || 3 
        || 2 ||  0  || 4 

userstable = || id || firstname || lastname || email 

것은 뭔가처럼 될 것이라고하고 싶으면 무엇 : 난에서 데이터를 가져해야 할 두 개의 테이블이 $currenttemplateid과 일치하는 templateid이 포함 된 행을 찾은 다음 해당 행에서 userid을 다시 가져옵니다. 그런 다음 userstable을보고 위에 나온 과 일치하는 id이있는 각 사용자의 정보를 검색하십시오. 또한 $currenttemplateid과 일치하는 templateid이 포함 된 행을 찾은 경우 해당 행의 groupid을보고 groupid이있는 행에있는 userid을 다시 가져오고 id이 일치하는 모든 사용자에 대한 정보를 다시 검색하십시오 상기에서 발견 된 userid.

제 설명이 다소 혼란스럽고, 제 질문이 초심을 악몽으로 여긴다면 (또한 걱정하지 마십시오. 실제 프로젝트에서는 준비되지 않은 문장을 사용하지 않습니다) ... MySQL을 단일의 효율적이고 아름다운 쿼리로 처리 할 수는 있지만 정확히 어떤 쿼리가 어떻게 생겼는지에 관해서는 완전히 손해볼 것입니다 ... 도움을 주셔서 대단히 감사합니다. :)

+3

https://en.wikipedia.org/wiki/Join_(SQL) –

+0

명확히 말하면, joinst를 사용하여'membershipstable'의 컬럼에 의해'userstable'에서 데이터를 가져 오는 방법을 알아 냈습니다. 내가 현재 가지고있는 더 큰 문제는 goupid, templateid 및 userid 부분 사이의 제휴를 처리 할 쿼리의 일부입니다. –

+0

URL을 공유하면 우리 중 하나가이 작업을 수행 할 수 있습니다. sqlfiddle 당신은로드 된 데이터로 생성합니다. – Drew

답변

1

3 방향 조인을 사용하여 선택한 구성원과 동일한 그룹의 모든 사용자를 찾습니다. 사용자가 템플릿 모두에 할당 된 경우

SELECT u.* 
FROM usertable AS u 
JOIN membershiptable AS m1 ON u.id = m1.userid 
JOIN membershiptable AS m2 ON m1.groupid = m2.groupid 
WHERE m2.templateid = $currenttemplateid 
나중에 답을 찾고 올 수있는 사람들을위한

DEMO

+0

도움 주셔서 대단히 감사합니다. 질의에 관해서,'usertable'에서 몇개의 열만 반환하기를 원한다면'SELECT u. *'부분 대신'SELECT u.id, u.firstname, u.lastname, '을 대신 사용할 수 있습니다 쿼리의 올바른? –

+0

물론 원하는 것을 반환 할 수 있습니다. – Barmar

+0

다시 한 번, 많은 감사합니다. :) –

0

는, 반환에 중복 된 항목과 결말의 우려가있다 템플릿에도 할당 된 그룹 이를 해결하려면 SELECT 부분 바로 뒤에 DISTINCT을 입력하십시오. 예 :

$query = " 
     SELECT DISTINCT 
      u.id, 
      u.firstname, 
      u.lastname, 
      u.username, 
      u.email 
     FROM $userstable AS u 
     INNER JOIN $membershipstable AS M1 ON u.id = M1.userid 
     INNER JOIN $membershipstable AS M2 ON M1.groupid = M2.groupid 
     WHERE M2.templateid = :currenttemplateid 
    "; 

이렇게하면 중복되지 않은 결과 만 반환됩니다.

관련 문제