2011-04-29 3 views
0

저는 PHP5 애플리케이션을 구축 중이며이 프로젝트와 관련된 모든 관련 정보를 나열해야합니다. 이를 위해 kc_projects, kc_project_memberskc_users이라는 세 개의 테이블이 있습니다. .한 가지 질문에 대해 수행하십시오. 가장 좋은 방법은 무엇입니까?

SELECT * FROM kc_projects AS p 
INNER JOIN kc_project_members AS pm 
ON pm.PROJECT_ID = p.ID 
INNER JOIN kc_users AS u 
ON u.ID = pm.USER_ID 

: 나는 그들 모두에 ID를 가지고 있고, 그가에 등록 된 프로젝트에 각각의 사용자를 연결 kc_project_members의 각 행의 열을 지금은

,이 쿼리가 하지만 실제로 원하는 결과를 검색하기 때문에 원하는대로 작동하지 않지만 원하는 방식으로 검색하지는 않습니다. 배열과 다른 배열을 만들고 그 배열 안에 쿼리 결과가 들어있는 다른 배열이 있습니다. 또한 각 사용자에 대해 중복 된 결과를 만듭니다. 즉, 한 명의 사용자 만 프로젝트에 등록하면 하나의 프로젝트 만 반환합니다. 하지만 더 많은 정보가 있으면 등록 된 사용자만큼 어레이가 반환되고 배열은 항상 동일한 프로젝트 정보를 갖게됩니다. 나는 그가 단지 하나의 프로젝트를 반환하고 그 안에 사용자가 들어있는 배열을 넣기를 바란다.

어쨌든 올바른 방법이 있습니까?

감사합니다,
태우기

+0

당신이 원하는 것을 출력 명확하지 않다 :

다음은 예입니다. 하나의 결과 집합에서이 작업을 수행하면 잠재적으로 사용자와 프로젝트 정보가 복제되거나 여러 쿼리를 실행하고 PHP 코드에서 결과 집합을 연결하여 데이터를 분리 할 수 ​​있습니다. 어느 쪽을 원하니? – Thomas

+0

쿼리가 배열을 작성하지 않습니다. PHP 쪽에서 수행됩니다. 배열의 레이아웃에 만족하지 않으면 코드가 잘못 작성 되었기 때문입니다. –

+0

"배열 문제"에 대한 결과 또는 검색 결과를 실행하는 데 사용하는 라이브러리 또는 기능을 확인하려면 '가져 오기 모드'에서 대부분의 라이브러리가 여러 가져 오기 모드, 결합, 결합 등을 처리 할 수 ​​있는지 확인하십시오. – regilero

답변

0

내가 배열에 의해 당신이 결과 세트를 의미 있으리라 믿고있어 ...

예 - 그것은 가능하지만, 아마 정확하게 당신이 모든 때문에, 그것을 상상 한대로 결과 집합에는 말할 수없는 경우와 같은 열 개수가 있어야합니다. ID가 1 인 프로젝트의 프로젝트 멤버 2 명과 ID가 7 인 프로젝트의 프로젝트 멤버 5 명

반환 할 열을 정확히 지정하십시오. - SELECT *은 트릭 (좋은 성능이 필요한 경우에는 특히 어쨌든 그렇게하는 것이 좋습니다.) 또한 사용자의 ID, 사용자 이름 또는 프로젝트 당 참조 된 사용자에게 필요한 모든 열은 문자열로 연결해야합니다.이 문자열은 나중에 PHP로 구문 분석해야합니다.

SELECT p.ID, p.PROJECT_NAME, GROUP_CONCAT(u.USERNAME SEPARATOR ',') AS PROJECT_MEMBERS 
FROM kc_projects p 
    JOIN kc_project_members pm ON p.ID=pm.PROJECT_ID 
    JOIN kc_users u ON pm.USER_ID=u.ID 
GROUP BY p.ID; 
+0

나는 당신의 충고를 따랐지만 하나의 질의 대신 두 가지 질의를 사용한다. 첫 번째 프로젝트에서 저는 멤버쉽 ID를 문자열로, 두 번째로는 목록에있는 프로젝트에서 필요한 멤버를 얻습니다. 따라서 프로젝트 당 하나의 쿼리를 작성할 필요가 없으며 원하는대로 작동합니다. :) –

관련 문제