사용자가 가지고있는 자격을 보여주기 위해 서로 연결되는 MySQL에 3 개의 테이블이 있습니다. 나는 헤더 유형의 전체 목록을 표시하는 테이블을 작성하려면, 다음 왼쪽 열에는 이름을 가지고 다음 열과 같이 유형 헤더에서 유효 기간을 표시 :MySQL 크로스 테이블 쿼리 3 테이블, Null 값 표시 그리드
Type
========
Type ID (PK, Int)
Type (VarChar)
User
========
User_ID (PK, Int)
Name (VarChar)
Qualification
========
Quali_ID (PK, Int)
User_ID (Int)
Type_ID (Int)
DateExpire (Date)
Status (VarChar)
내가 출력을 생성 할 같은 :
Users Type1 Type2 Type3 Type4 .......
User1 Qual Qual Qual .......
User2 Qual Qual .......
User3 Qual .......
User4 Qual Qual Qual Qual .......
은 모든 사용자가 모든 자격을하고 자격 상태가 '전체'와 동일하고 유효 기간이 오늘 날로부터 과거에없는 곳의 대상이 될 것입니다.
나는 아래에있는 인터넷에서 높거나 낮음으로 인터넷 검색을 한 후 SQL을 만들었지 만 존재하지 않는 유형은 포함시키지 못했습니다.
PHP로 MySQL 쿼리의 결과를 가져와 각 행을 분해하여 테이블을 채울 계획입니다. 누군가가 누락 된 Type 컬럼을 보여 주거나 더 나은 방법을 제안하도록 SQL을 완성하도록 도와 줄 수 있다면, 나는 감사 할 것입니다.
내 SQL :
SELECT 'User_ID', 'Name', GROUP_CONCAT(Types.Title ORDER BY QualiList.Type_ID) AS QualType
FROM TYPES
INNER JOIN (SELECT DISTINCT Type_ID FROM Qualification) QualiList
ON (QualiList.Type_ID = Types.Type_ID)
UNION ALL
SELECT User.User_ID, User.Name AS Name, GROUP_CONCAT(IFNULL(Qualification.DateExpire,'NA') ORDER BY QualiList.Type_ID) AS QualType
FROM TYPES
INNER JOIN (SELECT DISTINCT Type_ID FROM Qualification) QualiList
ON (QualiList.Type_ID = Types.Type_ID)
LEFT JOIN Qualification ON (Qualification.Type_ID = QualiList.Type_ID)
INNER JOIN User ON (User.User_ID = Qualification.User_ID)
GROUP BY Name