gpt4 book ai didi

sql - 我如何加入派生表?

转载 作者:行者123 更新时间:2023-11-29 11:37:11 25 4
gpt4 key购买 nike

sql语句是这样的:

select posts.id, posts.title 
from posts
inner join (select distinct post_id,created_at
from comments
order by created_at DESC limit 5
) as foo
on posts.id=foo.post_id
order by foo.created_at DESC;

我想得到一个等同于上面的 rails 3 sql 语句。

我试过的如下:

下面的 sql 查询给出了类似的结果。

select distinct post_id, created_at  
from comments
order by created_at DESC limit 5

@temp = Comment.select('distinct(comments.post_id),created_at').order('created_at DESC').limit(5)

我尝试将这个派生的@temp 表与posts 表连接起来以获取posts.title

我试过了,但失败了。

@temp2 = @temp.joins('posts')

那么,我如何将 posts 表与派生的 @temp 表连接起来?

                                   Table "public.posts"
Column | Type | Modifiers
-------------+------------------------+----------------------------------------------------
id | integer | not null default nextval('posts_id_seq'::regclass)
title | character varying(100) | not null
content | character varying(500) | not null
created_at | date |
updated_at | date |
tags | character varying(55) | not null default '50'::character varying
category_id | integer | not null default 1
Indexes:
"posts_pkey" PRIMARY KEY, btree (id)

评论

                                   Table "public.comments"
Column | Type | Modifiers
------------+------------------------+-------------------------------------------------------
id | integer | not null default nextval('comments_id_seq'::regclass)
post_id | integer | not null
name | character varying(255) | not null
email | character varying(255) | not null
content | character varying(500) | not null
created_at | date |
updated_at | date |
Indexes:
"comments_pkey" PRIMARY KEY, btree (id)

帖子模型,has_many :comments,评论模型,belongs_to :post

最佳答案

问题作者需要在进入 SQL 之前阅读基本的 Rails 和 activerecord 用法。需要了解 Activerecord 如何为您的数据建模以及如何使用它。首先用通用语言弄清楚你想做什么,然后看看如何使用现有的语言来做。

Rails 不知道您的@temp 表的结构。它只有一个结果集,据我所知,AREL 不会从结果集中构建逻辑。它从为事件记录模型提取的模式构建。

您无法从该数据构建 View ,因此您唯一的选择是使用带有 activerecord 类的标准连接选项或执行自定义 sql。

在 Rails 3 中,ActiveRecord 关系代数非常先进,使查询变得非常容易。

Comment.order("#{Comment.table_name}.created_at desc').limit(5).joins(:posts).order("#{Post.table_name} created_at desc")

关于sql - 我如何加入派生表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com