多表mysql查询

时间:2011-02-22 16:27:58

标签: mysql

我正在尝试制作一个多表查询,我不太确定如何正确执行。我有用户,消息,线程和项目。

用户与Message / Thread / Project关联,作为Creator或与他们“共享”。

消息包含在一个线程中(由message.thread_id和thread.id关联),一个线程包含在一个项目中(由thread.project_id和project_id关联)。

我想创建一个查询,其中给定User.id值,它将返回用户有权访问的所有消息,以及该消息所在的线程和项目名称,作为Creator或'Shared ”。我使用表来处理'股票'。粗略图是:http://min.us/mvpqbAU

rough diagram

每个列中都有更多列,但为了简单起见,我将它们排除在外。

2 个答案:

答案 0 :(得分:0)

我建议你不要继续这个设计。

您有太多的权限级别分布在各个区域。我建议你改变它,以便成员拥有组,然后组成为项目和线程的一部分。在消息级别,您正在查看在单个消息上具有该级别权限结构的管理噩梦。

答案 1 :(得分:0)

我对message,project_name和thread_name的列名做了一些假设,因为它们没有包含在图中。

/* Get messages where user is creator */
select u.name, m.message, p.project_name, t.thread_name
    from user u
        inner join message m
            on u.id = m.owner_user_id
        inner join thread t
            on m.group_id = t.id
        inner join project p
            on t.project_id = p.id
    where u.id = @YourUserID
union
/* Get messages where user has shared access */
select u.name, m.message, p.project_name, t.thread_name
    from user u
        inner join message_share ms
            on u.id = ms.user_id
        inner join message m
            on ms.message_id = m.id
                and m.owner_user_id <> @YourUserID
        inner join thread t
            on m.group_id = t.id
        inner join project p
            on t.project_id = p.id
    where u.id = @YourUserID