3

データベースに 3 つのテーブルがあります

PROJECTS
- id
- name
- date_created
- user_created
- status (or for disabled, 1 for enabled)

PROJECTS_MANAGERS (a project may have 0 or more managers)
- id
- project_id
- manager_username

PROJECTS_MEMBERS (a project may have 0 or more members)
- id
- project_id
- member_username

ステータスが 1 に等しい特定のユーザーが関与しているすべてのプロジェクトを一覧表示する mysql 結合クエリを作成しようとしています。具体的には、ユーザー名「bob」が「use_created」にあるすべてのプロジェクトを一覧表示するクエリ、「manager_username」、または「member_username」フィールドで、projects.status フィールドは 1 です。ただし、同じ project_id を持つ複数のマネージャーまたはメンバーが存在する可能性があります (もちろん、id と member_username は異なります)。

このコードを試してみましたが、うまくいかないようです (where 句でエラー '1054 unknown column 'projects.status' が表示されます)。「完全結合」を試みましたが、mysql がこれをサポートしていないことがわかりました。

SELECT *
FROM
    `projects` as theProjects

LEFT OUTER JOIN
    projects_managers
            AS theManagers
                    ON theProjects.id = theManagers.project_id
WHERE
    projects.status = 1
UNION ALL

SELECT *
FROM
    `projects` as theProjects
RIGHT OUTER JOIN
    projects_members
            AS theMembers
                    ON theProjects.id = theMembers.project_id
        WHERE
    projects.status = 1

どんな助けでも大歓迎です。

4

1 に答える 1

2

どうですか:

SELECT projects.*
FROM projects
LEFT JOIN projects_managers managers ON managers.project_id=projects.id
LEFT JOIN projects_members members ON members.project_id=projects.id
WHERE status=1 AND
      (user_created="bob" OR managers.username="bob" OR members.username="bob")
GROUP BY projects.id
于 2012-12-20T20:11:17.210 に答える