Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpRlLnk 151 of 224 menu
◀ ▶

Выборка через таблицу связи в Dart

Запрос, который вытащит юзеров вместе с их городами, делает два соединения: первое присоединит к юзерам таблицу связи, а второе по связям присоединит города:

SELECT users.name AS user_name, cities.name AS city_name FROM users LEFT JOIN users_cities ON users_cities.user_id = users.id LEFT JOIN cities ON users_cities.city_id = cities.id

Результат запроса в Dart содержит имя каждого юзера столько раз, со сколькими городами он связан:

var data = [ {'user_name': 'user1', 'city_name': 'city1'}, {'user_name': 'user1', 'city_name': 'city2'}, {'user_name': 'user1', 'city_name': 'city3'}, {'user_name': 'user2', 'city_name': 'city1'}, {'user_name': 'user2', 'city_name': 'city2'}, {'user_name': 'user3', 'city_name': 'city2'}, {'user_name': 'user3', 'city_name': 'city3'}, {'user_name': 'user4', 'city_name': 'city1'}, ];

Удобнее переконвертировать такой результат и превратить его в следующий:

var res = { 'user1': ['city1', 'city2', 'city3'], 'user2': ['city1', 'city2'], 'user3': ['city2', 'city3'], 'user4': ['city1'], };

Напишем код, выполняющий такую конвертацию:

var data = [ {'user_name': 'user1', 'city_name': 'city1'}, {'user_name': 'user1', 'city_name': 'city2'}, {'user_name': 'user2', 'city_name': 'city1'}, ]; var res = <String, List<String>>{}; for (var elem in data) { var name = elem['user_name'] as String; var city = elem['city_name'] as String; res.putIfAbsent(name, () => []).add(city); } print(res);

Напишите запрос, который достанет товары вместе с их категориями. Товар может принадлежать нескольким категориям.

Выведите полученные данные в консоль так, чтобы в каждой строке сначала стояло имя продукта, а после двоеточия через запятую перечислялись категории этого продукта:

product1: category1, category2, category3 product2: category1, category3 product3: category1
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить