170 похожих чатов

Скажите пожалуйста, как правильно парсить sql rows в случае если

там джоин из m2m связи

вот например я делаю запрос чтоб получить user_id, product_id, product_name
получаю такой респонс:


+------------+-------------------------------------------------------------------------+
|user_id |337ade25-d0bf-4e45-b807-a28956a352cc|337ade25-d0bf-4e45-b807-a28956a352cc|
+------------+-------------------------------------------------------------------------+
|product_id |237baa3d-8100-4ae6-bb46-35838a6c3e46|237baa3d-8100-4ae6-bb46-35838a6c3e46|
+------------+-------------------------------------------------------------------------+
|product_name|Wifi |Staging |
+------------+-------------------------------------------------------------------------+


Выходит что я получил 2 продукта (Wifi, Staging), но user_id дублируется для каждого продукта, т.е 2 раза

Я хочу это распарсить в свою гошную структуру:


type User struct {
UserID uuid.UUID
Products []*Products
}

type Product struct {
ProductID uuid.UUID
Name string
}


То есть вот я получил sql.Rows, делаю по ним итерацию и могу достать продукт. Но как мне достать правильно user ID с учетом что он будет лежать в каждой row? просто доставать это из первой записи и все? Только такой вариант мне кажется логичным, но выглядит как костыль)


логика примерно такая выходит:


// сначала достать user id из первой строки
var userID uuid.UUID
rows.Scan(&userID)
// затем создать структуру юзера
user := &User{userID: userID}
// затем итернуться по rows.Next() и сформировать список продуктов


То есть я знаю как работать с sql.Rows, но меня смущает вариант реализации как достать одно какое-то значение, когда оно дублируется во всех остальных строках. Надеюсь вы поняли мой вопрос)

3 ответов

2 просмотра

Обычно m2m выбирается доп запросом Если ты хочешь за раз, то тебе нужно сгруппировать данные по ключу (нарпимер, user_id)

rglitchard- Автор вопроса
First Last
Обычно m2m выбирается доп запросом Если ты хочешь ...

а я чот думал что если все это запихнуть в один запрос то будет быстрее

rglitchard
а я чот думал что если все это запихнуть в один за...

Ну тут чат про го) Выбрать за раз все нужные данные будет быстрее всегда (практически)

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
Ребята, а из API геокодеров (по адресам в РФ) что сейчас актуального и есть ли среди актуального бесплатное/с нормаотным лимитом запросов? ситуация простая - на сайте периоди...
Dreamer_0x01 VeseloV
8
Добрый день, а есть ли возможность завернуть уже зашифрованный пасс в креденшл, в интернете натыкаюсь только на создание пары и ее шифровки, но тогда все равно нужно расшифров...
SSS
1
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Есть тут те у кого дети есть + 2 работы + в зал ходят + в семейной жизни все хорошо?
Abdul-Aziz M.
13
Карта сайта