【发布时间】:2013-02-27 19:12:33
【问题描述】:
我在将多个 sql 语句组合成一个更大的单个语句时遇到问题。
问题: 我有一个新闻提要,需要返回登录用户关注的帐户中的所有帖子。我还需要将一个表与其他两个表连接起来,以获取发布在新闻提要上的帐户的用户名。我有 4 个表将用于此查询:
关注者(列出用户及其关注的帐户和被关注的帐户类型)
重要栏目:[user_id, following_id, type]
用户(用户可以关注其他用户帐户)
重要栏目:[用户名]
服务器(用户也可以关注服务器帐户。请注意,服务器与用户是一对多的,因为用户可以创建 0 个或多个与其帐户绑定的服务器)
重要栏目:[标题]
News_Posts(其中包含消息、帐户类型(整数)和 poster_id)
重要栏目:[poster_id, message, type]
我不知道如何获取当前登录用户的新闻帖子。
查询 1:根据“类型”返回具有正确用户名的完整新闻列表 0 = 用户,1 = 服务器
SELECT news_posts.*, users.username FROM news_posts INNER JOIN users ON news_posts.poster_id=users.id WHERE news_posts.TYPE='0'
UNION
SELECT news_posts.*, servers.title FROM news_posts INNER JOIN servers ON news_posts.poster_id=servers.id WHERE news_posts.TYPE='1'
查询 2:返回特定用户(在本例中 id 为 1)正在关注的帐户
SELECT following_id, type FROM follower WHERE user_id='1'
如何将查询 1 与查询 2 结合起来,以便只有 news_post 记录 WHERE news_posts.poster_id = 查询 2 结果。它必须考虑关注者的类型,以便使用正确的用户名
编辑:这是架构的粗略版本:http://sqlfiddle.com/#!2/a48f3/1
【问题讨论】:
-
修改模式是否公平?例如,我是否可以建议有一个 Account 表来存储用户和服务器?该表将包含一个类型列,用于区分两种(或更多)类型的帐户?
-
仍处于原型阶段,因此我很乐意提供改进架构的建议。此外,这是一个非常粗略的(仅主要列)架构,因此可以可视化:sqlfiddle.com/#!2/a48f3/1 编辑:我目前允许帐户拥有多个服务器,这就是我将它们分开构造的原因。所以这是一对多的关系。
标签: mysql sql union inner-join