使用 Ruby on Rails Active Record 的 SQL 多表嵌套组

标签 sql ruby-on-rails postgresql activerecord

模型:

一个调查survey_answers,每个都有一个answer和一个question

一个问题属于一个类别

示例:

Survey_answersurvey_idanswer_idquestion_id

questioncategory_id

我正在使用 Ruby on RailsActive Record

使用 SQL,并从调查开始,我如何分组如下:

{ 类别 => 问题 => 答案 }

示例输出:

{[
  category_one_record, 
    [question_1,[answer_1, answer_2]],
    [question_2,[answer_3, answer_4]],
  category_two_record, 
    [question_3,[answer_5, answer_6]],
    [question_4,[answer_7, answer_8]],
  category_three_record,
    ...
]}

我了解如何进行分组,但我不了解如何使用 SQL 进行嵌套分组

最佳答案

我相信您正在以非 SQL 方式考虑这个问题。

SQL 是表格形式的,当返回这种信息时,接受重复而不是寻找生成嵌套数据结构(例如可以用 JSON、XML 等来完成)是正常的。

看起来不需要任何实际聚合(GROUP BY 的用途)。相反,您指的是一种将相关记录并排保存的方法。

简单地加入数据然后对其进行排序。

你的原始帖子在表格结构上不清楚,所以这是我的意思的一个非常粗略的例子......

SELECT
  survey.name   AS survey_name,
  category.name AS category_name,
  question.text AS question_text,
  answer.text   AS answer_text
FROM
  survey
INNER JOIN
  question
    ON question.survey_id = survey.id
INNER JOIN
  category
    ON category.id = question.category_id
INNER JOIN
  answer
    ON answer.question_id = question.id
ORDER BY
  survey.name,
  category.name,
  question.text,
  answer.text

这样的查询可能会返回如下所示的记录集...

 survey_name | category_name | question_text | answer_text
-------------+---------------+---------------+-------------
 survey_1    | category_1    | question_1    | answer_1
 survey_1    | category_1    | question_1    | answer_2
 survey_1    | category_1    | question_2    | answer_3
 survey_1    | category_1    | question_2    | answer_4
 survey_1    | category_2    | question_3    | answer_5

表格。不嵌套。

关于使用 Ruby on Rails Active Record 的 SQL 多表嵌套组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53210940/

相关文章:

sql - oracle DB 为什么具有空格比较的字符串总是给出 false?

mysql - 从单列中计数并将其分成 2 列

mysql - 如何处理mysql表中的大量行

sql - 在Oracle中,如果where子句包含一些附加字段,还会使用复合索引吗?

ruby-on-rails - 用户 has_many :users, :through => :friends - how?

node.js - postgresql - 错误 : Connection terminated

ruby-on-rails - 在 Rails 中执行类似操作的正确方法

html - 如何创建一个一段时间后消失的div,但悬停会保留它?

sql - 根据同一表中的两行检索一行

具有多个 wheres 和 whereNotIn 的 Laravel 5.7 Eloquent 查询