首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多表mysql查询

多表mysql查询
EN

Database Administration用户
提问于 2011-02-22 19:52:21
回答 3查看 267关注 0票数 3

我试图做一个多表的查询,我不太清楚如何做好。我有用户、消息、线程和项目。

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

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

我想要创建一个查询,其中给定一个User.id值,它将返回用户可以访问的所有消息,以及消息所在的线程和项目名称,无论是Creator还是“Shared”。我用一个表格来处理‘股票’。粗略的图表是:http://min.us/mvpqbAU

每个列中都有更多的列,但为了简单起见,我忽略了它们。

EN

回答 3

Database Administration用户

发布于 2011-02-23 03:37:48

看来您需要使用“联接”语法。类似于:

代码语言:javascript
复制
SELECT 
u.name,
u.id,
m.id,
t.id,
p.id,
FROM User u
LEFT JOIN Message m ON m.owner_user_id = u.id
LEFT JOIN Thread  t ON t.owner_user_id = u.id
LEFT JOIN Project p ON p.owner_user_id = u.id
WHERE u.id = 12345

当然,这将必须被修改,以包括您实际想要返回的字段以及您可能需要的任何排序和排序.但这应该能让你开始。祝好运!

票数 3
EN

Database Administration用户

发布于 2011-02-23 15:33:03

我可能会用一个友联市来接近这个。

对每种类型的消息(消息、项目、线程)执行查询:

代码语言:javascript
复制
SELECT user.name, type, type.info FROM (
  ( SELECT user.name, 'project', project.* FROM ... // PROJECT OWNER AND SHARED QUERY // )
  UNION
  ( SELECT user.name, 'thread', thread.* FROM ... // THREAD OWNER AND SHARED QUERY // )
  UNION
  ( SELECT user.name, 'message', message.* FROM ... // MESSAGE OWNER AND SHARED QUERY // )
) combined

其中type是信息的来源,而type.info包含特定类型的字段。只需确保您的project.*thread.*message.*包含相同数量的字段,否则UNION会发出抱怨。

**免责声明,没有经过测试,只是一个可行的理论。

票数 2
EN

Database Administration用户

发布于 2011-02-25 14:14:07

基本查询应该如下所示,用user_id替换12345。您可以根据需要添加其他字段。

代码语言:javascript
复制
select msg.id message_id
from message msg
inner join (
    select thr.id thread_id 
    from thread thr
    inner join (
        select id as project_id from project where owner_user_id = 12345
        union select project_id from project_share where user_id = 12345
    ) prj on prj.project_id = a.project_id
    union select thread_id from thread_share where user_id = 12345
) thr on thr.thread_id = msg.group_id
union select message_id from message_share where user_id = 12345

警告:未测试。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/1394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档