MySQLには3つのテーブルがあり、ユーザーがどのような資格を持っているかを示すために相互に接続しています。ヘッダーにタイプの完全なリストが表示され、左側の列にユーザー名が表示され、列にタイプヘッダーの下に有効期限が表示されるテーブルを作成したいのですが、次のようになります。
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クエリの結果を取得し、各行を分解してテーブルに入力する予定です。誰かがSQLを完成させて、不足しているType列を表示したり、より良い方法を提案したりするのを手伝ってくれたら、ありがたいです。
私の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