Question

I have the following tables: joined_schedules, schedules, users

joined_schedules has: schedule_id, user_id, permission
schedules has: schedule_id, schedule_name
users has: user_id, name

permission can either be 0, 1, 2 (0 is an owner, 1 is an administrator and 2 is a regular user)

I am trying to select all of a users schedules where the permission is 2. I have no problem with this but I also need the owner of the schedule (permission = 0) in the same query. I am having trouble with this part.

The problem with this sql is that it only selects the schedule_id and the schedule_name. I also need the name of the user where their permission = 0 for the same schedule.

SELECT joined_schedules.schedule_id, schedules.schedule_name
    FROM joined_schedules
    INNER JOIN schedules
        ON joined_schedules.schedule_id = schedules.schedule_id
    WHERE joined_schedules.user_id = '$id'
    AND joined_schedules.permission = 2

EDIT: I have also tried

SELECT joined_schedules.schedule_id, schedules.schedule_name, users.name
    FROM joined_schedules
    INNER JOIN schedules
        ON joined_schedules.schedule_id = schedules.schedule_id
        INNER JOIN users
            ON users.user_id = joined_schedules.schedule_id
            AND joined_schedules.permission = 0
                WHERE joined_schedules.user_id = '$id'
    AND joined_schedules.permission = 2
Was it helpful?

Solution

You can accomplish this by joining back on the joined_schedules table where permission = 0:

SELECT joined_schedules.schedule_id, schedules.schedule_name, u.name
FROM joined_schedules
    INNER JOIN schedules
        ON joined_schedules.schedule_id = schedules.schedule_id 
            AND joined_schedules.permission = 2
    LEFT JOIN joined_schedules jsOwner 
        ON jsOwner.schedule_id = schedules.schedule_id 
            AND jsOwner.permission = 0
    LEFT JOIN users u 
        ON u.user_id = jsOwner.user_id 
WHERE joined_schedules.user_id = '$id'
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top