我怎样才能根据孩子进行排序?

时间:2016-12-04 20:51:10

标签: database postgresql sorting fluent vapor

使用Vapor和Fluent(PostgreSQL,如果重要的话)我有 keep_running = True i = 1 while keep_running: if pipes[matrixnum][1].poll(): end = pipes[matrixnum][1].recv() print('main received %i (i=%i)' %(end[0],i )) i += 1 results.append(end[:3]) if i == vectornum: keep_running = False for process in processlist: process.join() 实体B(A是B的父母)引用aID: NodeA有一个与A的多对多关系。如何进行查询以获取按B的计数排序的所有A

我希望结果看起来像这样:

B

All A's in DB

2 个答案:

答案 0 :(得分:0)

首先,

  1. 为A
  2. 创建模态
  3. 将该JSON字符串转换为A
  4. 的数组

    如果你这样做,你的排序就像 -

    一样简单

    array.sort { $0.bCount < $1.bCount }

答案 1 :(得分:0)

使用Entity完全在Fluent中实现这一点非常棘手。首先,您需要使用原始SQL来获取bCount。其次,您需要将init(node:)更改为接受bCount,但它不应该在您的makeNode()中,因为我们不想为它创建存储的数据库字段。 / p>

尝试使用原始SQL(未经测试):

SELECT
  A.*,
  (
    SELECT COUNT(*)
    FROM B
    WHERE B.aID = A.id
  ) AS bCount
FROM A
ORDER BY bCount

然后,运行该查询以获取A模型。

var models: [A] = []
if let driver = drop.database?.driver as? PostgreSQLDriver {
  if case .array(let array) = try driver.raw(sql) {
    for result in array {
      do {
        var model = try A(node: result)
        models.append(model)
      }
    }
  }
}

正如我之前所说,A上的初始化方法将会收到bCount,因此您需要将其存储在那里。