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 ответов

18 просмотров

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

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

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

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

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта