Извлечение данных из БД и заполнение секционированного списка - PullRequest
0 голосов
/ 26 июня 2019

Я запутался в этом как с точки зрения внешнего интерфейса, так и с запросом данных из базы данных SQLite.Если у вас есть идеи, как решить любой из этих вопросов, пожалуйста, ответьте.

База данных SQLite

У меня есть такая таблица:

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

Теперь я хочу отобразить эти данные в группах по 5 единиц (т.е. групп до 5 единиц) в списке в моем приложении флаттера.

Таким образом, в 1-й группе будет 8 элементов,

, 2-йбудет иметь 6 элементов,

, а в 3-й группе будет 5 элементов (и все еще не завершено, поскольку можно добавить еще элементов, пока количество для этой группы не станет 5)

Примерно так:

enter image description here

Теперь мое приложение может иметь несколько групп, подобных этой.Кроме того, я не думаю, что Grid View Builder может работать здесь, так как для каждой группы мне придется отображать некоторые данные для группы, а также накопленные данные (которые не показаны на рисунке)

Вопросы:

1) Как запросить данные из базы данных SQFLite?

2) Как отобразить запрошенные данные в моем приложении Flutter App?

1 Ответ

1 голос
/ 26 июня 2019

К сожалению, этот тип проблемы требует рекурсивного 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.

...