Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
RESTAPI中的原始SQL查询_Sql_Postgresql_Relational Database - Fatal编程技术网

RESTAPI中的原始SQL查询

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

假设我有两张桌子:

帖子 使用者 有了这两个表,我想做一个SELECT*FROM posts。。。查询并最终以如下方式响应:

{[
  {
    "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。希望这是有意义的。是的,与此类似,你知道我将如何在代码中管理响应以便提取用户列吗?