Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在postgresql中连接两个单独的查询…查询。。。(可能或不可能)_Sql_Ruby On Rails_Ruby_Arrays_Postgresql - Fatal编程技术网

正在postgresql中连接两个单独的查询…查询。。。(可能或不可能)

正在postgresql中连接两个单独的查询…查询。。。(可能或不可能),sql,ruby-on-rails,ruby,arrays,postgresql,Sql,Ruby On Rails,Ruby,Arrays,Postgresql,我在一个问题上得到了很大的帮助,我现在正在尝试尽可能多的优化,虽然我通常不太喜欢前端加载优化,但这是一种独特的情况 想象一个应用程序中有三个实体: User Post Instance # An instance is just a reference to a post 字段如下所示: User id Post id user_id name Instance id user_id post_id helped_by_user_id 要求: 返回10个实例,

我在一个问题上得到了很大的帮助,我现在正在尝试尽可能多的优化,虽然我通常不太喜欢前端加载优化,但这是一种独特的情况

想象一个应用程序中有三个实体:

User
Post
Instance # An instance is just a reference to a post
字段如下所示:

User
  id
Post
  id
  user_id
  name
Instance
  id
  user_id
  post_id
  helped_by_user_id
要求:

返回10个实例,其中:

用户id不等于3 post_id是唯一的 没有其他实例的post_id和help_by_user_id为3 编辑:

我已经为此创建了一个SQLFIDLE


作为记录,我使用Ruby 1.9.3、Rails 3.2.13和Postgresql Heroku

对,因此您希望由$user以外的人撰写的帖子,其中没有任何实例表示出现$user回复。您希望从这个集合中选择十个不同的帖子

如果这是问题的准确框架,那么这就是您想要的:

SELECT *
FROM posts p
WHERE p.user_id <> 3
AND NOT EXISTS (
  SELECT 1
  FROM instances i
  WHERE i.post_id = p.id
  AND i.helped_by_user_id = 3
)
ORDER BY p.id
LIMIT 10;

总的来说,这里的问题似乎不是很清楚。通常,如果你能用清晰的英语说出你想从数据集中得到什么,那么把它翻译成有用的SQL就很容易了

为了便于阅读,由于@CraigRinger获得了100%的积分,对我来说最有效的最终解决方案是:

SELECT DISTINCT ON (post_id) *
FROM instances i
WHERE i.user_id <> 3
AND i.helped_by_user_id IS NULL
AND NOT EXISTS (
  SELECT 1
  FROM instances ii
  WHERE ii.post_id = i.post_id
  AND ii.helped_by_user_id = 3
)
ORDER BY i.post_id
LIMIT 10;

这个解释有点令人困惑。您是否有可能提供一些实际的样本数据,并显示预期的结果?很有用,克雷格,你说得很对。。。这是一个很难解释的问题,所以我凑了一把小提琴来更好地解释它。我正在将其附加到我的原始帖子。忘记保存编辑?我看不出来。对不起,克雷格,现在应该得救了。再次感谢!谢谢我认为问题的一部分在于,无论它应该是什么,实例都是一个令人难以置信的令人困惑的术语。这到底是什么意思?为什么在创建帖子时要创建两个实例?似乎是一个奇怪的模式。我希望数据集能让它变得更有意义,但事实并非如此。这帮了大忙。似乎对我来说最完美的是:从实例i中选择DISTINCT ON post_id*,其中i.user_id 3和i.helped_by_user_id为NULL且不存在。从实例ii中选择1,其中ii.post_id=i.post_id和ii.helped_by_user_id=3 ORDER by i.post_id限制10;它返回10个具有唯一post_id的实例,并检查以确保具有该post_id和设置为helped_by_user_id的用户的实例不存在。我在构思这个问题时遇到了很多麻烦,所以谢谢你的支持。我更新了我的问题,以便更好地解释它,我提供了太多无用的信息。