从数据库中获取数据并填充分区列表
Fetching data from DB and populate a partitioned List
无论从前端的角度还是从 SQLite 数据库查询数据,我都对此感到困惑。如果您知道如何解决其中任何一个问题,请回答。
SQLite 数据库
我有一个 table 喜欢这个:
transactionId | productId | quantity
1 2 1
2 4 0
3 1 null
4 3 1
5 9 1
6 6 0
7 1 1
8 7 1
9 8 1
10 2 1
11 0 null
12 3 1
13 5 1
14 7 1
15 1 0
16 2 1
17 9 1
18 0 null
19 2 1
现在我想在我的 flutter 应用程序的列表中以 5 个单元为一组(即,直到完成 5 个单元的组)显示此数据。
所以第 1 组将有 8 个项目,
第二个将有 6 个项目,
第 3 组将有 5 个项目
(并且仍然不完整,因为可以添加更多项目直到该组的数量变为 5)
像这样:
现在我的应用程序可以有多个这样的组。另外,我不认为网格视图生成器可以在这里工作,因为对于每个组我都必须显示该组的一些数据以及累积数据(图中未显示)
问题:
1) 如何从SQFLite数据库中查询数据?
2) 如何在我的Flutter App前端显示查询到的数据?
不幸的是,这类问题需要递归 CTE(或其他迭代处理)。
假设transactionId
是连续的,没有间隙:
with recursive cte as (
select transactionId, productId,
coalesce(quantity, 0) as quantity,
1 as bin
from t
where transactionId = 1
union all
select t.transactionId, t.productId,
(case when cte.quantity > 5
then 0 else cte.quantity
end) + coalesce(t.quantity, 0) as quantity,
(case when cte.quantity > 5 then 1 else 0 end) + cte.bin as bin
from cte join
t
on t.transactionId = cte.transactionId + 1
)
select *
from cte;
如果 transactionId
有差距或其他问题,只需使用 row_number()
(在另一个 CTE 中)为 where
子句创建适当的列。
无论从前端的角度还是从 SQLite 数据库查询数据,我都对此感到困惑。如果您知道如何解决其中任何一个问题,请回答。
SQLite 数据库
我有一个 table 喜欢这个:
transactionId | productId | quantity
1 2 1
2 4 0
3 1 null
4 3 1
5 9 1
6 6 0
7 1 1
8 7 1
9 8 1
10 2 1
11 0 null
12 3 1
13 5 1
14 7 1
15 1 0
16 2 1
17 9 1
18 0 null
19 2 1
现在我想在我的 flutter 应用程序的列表中以 5 个单元为一组(即,直到完成 5 个单元的组)显示此数据。
所以第 1 组将有 8 个项目,
第二个将有 6 个项目,
第 3 组将有 5 个项目 (并且仍然不完整,因为可以添加更多项目直到该组的数量变为 5)
像这样:
现在我的应用程序可以有多个这样的组。另外,我不认为网格视图生成器可以在这里工作,因为对于每个组我都必须显示该组的一些数据以及累积数据(图中未显示)
问题:
1) 如何从SQFLite数据库中查询数据?
2) 如何在我的Flutter App前端显示查询到的数据?
不幸的是,这类问题需要递归 CTE(或其他迭代处理)。
假设transactionId
是连续的,没有间隙:
with recursive cte as (
select transactionId, productId,
coalesce(quantity, 0) as quantity,
1 as bin
from t
where transactionId = 1
union all
select t.transactionId, t.productId,
(case when cte.quantity > 5
then 0 else cte.quantity
end) + coalesce(t.quantity, 0) as quantity,
(case when cte.quantity > 5 then 1 else 0 end) + cte.bin as bin
from cte join
t
on t.transactionId = cte.transactionId + 1
)
select *
from cte;
如果 transactionId
有差距或其他问题,只需使用 row_number()
(在另一个 CTE 中)为 where
子句创建适当的列。