使用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: Node
而A
有一个与A
的多对多关系。如何进行查询以获取按B
的计数排序的所有A
?
我希望结果看起来像这样:
B
All A's in DB
答案 0 :(得分:0)
首先,
如果你这样做,你的排序就像 -
一样简单 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
,因此您需要将其存储在那里。