RESTAPI中的原始SQL查询
假设我有两张桌子: 帖子 使用者 有了这两个表,我想做一个SELECT*FROM posts。。。查询并最终以如下方式响应:RESTAPI中的原始SQL查询,sql,postgresql,relational-database,Sql,Postgresql,Relational Database,假设我有两张桌子: 帖子 使用者 有了这两个表,我想做一个SELECT*FROM posts。。。查询并最终以如下方式响应: {[ { "id": "1", "user_id": "2", "title": "Foo", "slug": "foo", "content": "bar", "views": "0", "user": { "id": "2", "username": "john", "em
{[
{
"id": "1",
"user_id": "2",
"title": "Foo",
"slug": "foo",
"content": "bar",
"views": "0",
"user": {
"id": "2",
"username": "john",
"email": "john@smith.com",
"hash": "aeigh*£HAEGhoiaehg",
"role": "admin",
"auth": "aeg89hiae9g8hA*H£GA(*EHG"
}
}
]}
我对SQL非常陌生,在使用ORM时,这样的模式似乎非常常见,所以我想知道我必须采取哪些步骤才能使用原始SQL获得这样的结果
有什么想法吗?在postgresql 9.2或更高版本中,您可以使用row_to_json函数:
select row_to_json(posts)
from
posts....;
您的查询可能类似于:
select row_to_json(row)
from (
select p.*, urd AS user
from posts p
inner join (
select ur.*
from users ur
) urd(id,username,email,hash,role,auth) on urd.id = p.user_id
) row;
这方面的直接sql不需要如此复杂:
select
p.*, u.*
from
posts p
inner join users u on p.user_id = u.id
在postgresql 9.2或更高版本中,您可以使用row_to_json函数:
select row_to_json(posts)
from
posts....;
您的查询可能类似于:
select row_to_json(row)
from (
select p.*, urd AS user
from posts p
inner join (
select ur.*
from users ur
) urd(id,username,email,hash,role,auth) on urd.id = p.user_id
) row;
这方面的直接sql不需要如此复杂:
select
p.*, u.*
from
posts p
inner join users u on p.user_id = u.id
要使用原始SQL获得这样的结果,我必须执行哪些步骤
有第二个参数可以漂亮地打印外部标高
如果pretty_bool为true,那么将在级别1元素之间添加换行符
使用子查询将用户添加到行:
选择row_to_jsoncombi,true为pretty_json
从…起
选择p.*,u作为用户-整个用户行
从邮政p
在u.id=p.user\u id上加入用户u
其中p.id=1
康比;
您只需要一个子查询级别
或在Postgres 9.4或更高版本中使用,以漂亮地打印所有级别:
选择jsonb_prettyto_jsonbcombi作为pretty_jsonb
从…起
选择p.*,u作为用户
从邮政p
在u.id=p.user\u id上加入用户u
其中p.id=1
康比;
键以前的列名现在按字母顺序排列,这就是它们在jsonb中的存储方式
小提琴
OLD-转换为文本::用于显示的文本;未显示换行符
要使用原始SQL获得这样的结果,我必须执行哪些步骤
有第二个参数可以漂亮地打印外部标高
如果pretty_bool为true,那么将在级别1元素之间添加换行符
使用子查询将用户添加到行:
选择row_to_jsoncombi,true为pretty_json
从…起
选择p.*,u作为用户-整个用户行
从邮政p
在u.id=p.user\u id上加入用户u
其中p.id=1
康比;
您只需要一个子查询级别
或在Postgres 9.4或更高版本中使用,以漂亮地打印所有级别:
选择jsonb_prettyto_jsonbcombi作为pretty_jsonb
从…起
选择p.*,u作为用户
从邮政p
在u.id=p.user\u id上加入用户u
其中p.id=1
康比;
键以前的列名现在按字母顺序排列,这就是它们在jsonb中的存储方式
小提琴
OLD-转换为文本::用于显示的文本;不显示换行符或者,您可以使用较薄的中间层-。它是一个开源的超轻量级持久层,支持PostgreSQL。它是用9.3测试的,但9.2可能不是问题
您可以使用docker映像在大约10分钟内部署。或者您可以使用一个较薄的中间层-。它是一个开源的超轻量级持久层,支持PostgreSQL。它是用9.3测试的,但9.2可能不是问题
您可以使用docker映像在大约10分钟内部署。似乎很有趣。尽管如此,这将如何帮助我加入数据?我可能需要更具体一点,但我更关心的是转换为JSON。@daryl不确定我的语法是否完美,但可以连接数据以获得所需内容。这里的递归urd方法是由Hey拼凑而成的,只是想知道,是否可以不将其作为JSON返回就可以这样做?我把它换成later@daryljson是一种分层格式,而sql不是。所以p的数据会被复制,但会给你唯一的u。希望这是有意义的。是的,与此类似,我想知道如何在代码中管理响应,以便提取用户列?似乎很有趣。尽管如此,这将如何帮助我加入数据?我可能需要更具体一点,但我更关心的是转换为JSON。@daryl不确定我的语法是否完美,但可以连接数据以获得所需内容。这里的递归urd方法是由Hey拼凑而成的,只是想知道,是否可以不将其作为JSON返回就可以这样做?我把它换成later@daryljson是一种分层格式,而sql不是。所以p的数据会被复制,但会给你唯一的u。希望这是有意义的。是的,与此类似,你知道我将如何在代码中管理响应以便提取用户列吗?