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

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

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

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

Результат запроса

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

val data = listOf( mapOf("user_name" to "user1", "city_name" to "city1"), mapOf("user_name" to "user1", "city_name" to "city2"), mapOf("user_name" to "user1", "city_name" to "city3"), mapOf("user_name" to "user2", "city_name" to "city1"), mapOf("user_name" to "user2", "city_name" to "city2"), mapOf("user_name" to "user3", "city_name" to "city2"), mapOf("user_name" to "user3", "city_name" to "city3"), mapOf("user_name" to "user4", "city_name" to "city1") )

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

val res = mapOf( "user1" to listOf("city1", "city2", "city3"), "user2" to listOf("city1", "city2"), "user3" to listOf("city2", "city3"), "user4" to listOf("city1") )

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

val res = mutableMapOf<String, MutableList<String>>() for (elem in data) { val name = elem.getValue("user_name") val city = elem.getValue("city_name") val cities = res.getOrPut(name) { mutableListOf() } cities.add(city) } println(res)

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

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

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