У меня есть таблицы, виллы, местоположения, категории, удобства, виллы_аминты и тип (тип таблиц) Иметь много виллов, перекресток (illas_amenity) < /li>
А удобства принадлежат одному типу. Но поскольку предел ограничивает ряды
то, что у меня есть, - это только дублированные ряды, как я могу нанести на стражу на каждой виллах < /p>
// this is the query
query := `
SELECT
v.id,
v.name,
v.description,
v.category_id,
v.location_id,
v.min_guest,
v.bedrooms,
v.baths,
v.price,
v.image_urls,
c.id,
c.name,
l.id,
l.area,
a.id,
a.name as amenity_name,
t.name as type_amenity,
v.created_at,
v.updated_at
FROM
villas v LEFT JOIN categories c ON v.category_id = c.id LEFT JOIN locations l ON v.location_id = l.id
LEFT JOIN villas_amenities va ON v.id = va.villa_id LEFT JOIN amenities a ON va.amenity_id = a.id
LEFT JOIN types t ON t.id = a.type_id
`
< /code>
// this is how i populate the rows:
ctx, cancel := context.WithTimeout(ctx, QueryTimeoutDuration)
defer cancel()
rows, err := v.db.QueryContext(ctx, query)
if err != nil {
return nil, err
}
defer rows.Close()
villas := []*Villa{}
villaMap := make(map[int]*Villa)
for rows.Next() {
villa := &Villa{}
amenity := &SelectedAmenity{}
rowUrls := []uint8{}
err := rows.Scan(
&villa.Id,
&villa.Name,
&villa.Description,
&villa.CategoryId,
&villa.LocationId,
&villa.MinGuest,
&villa.Bedrooms,
&villa.Baths,
&villa.Price,
&rowUrls,
&villa.Category.Id,
&villa.Category.Name,
&villa.Location.Id,
&villa.Location.Area,
&amenity.Id,
&amenity.Name,
&amenity.Type,
&villa.CreatedAt,
&villa.UpdateAt,
)
if err != nil {
return nil, err
}
err = json.Unmarshal(rowUrls, &villa.ImageUrls)
if err != nil {
return nil, err
}
// if the row not exist add not the map
if _, ok := villaMap[villa.Id]; !ok {
villaMap[villa.Id] = villa
}
// update the amenity with the result of the amenity row
villaMap[villa.Id].Amenity = append(villaMap[villa.Id].Amenity, *amenity)
}
// convert the map to slice
for _, val := range villaMap {
villas = append(villas, val)
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... oin-tables
MySQL Pagination в таблицах соединения ⇐ MySql
Форум по Mysql
1750842339
Anonymous
У меня есть таблицы, виллы, местоположения, категории, удобства, виллы_аминты и тип (тип таблиц) Иметь много виллов, перекресток (illas_amenity) < /li>
А удобства принадлежат одному типу. Но поскольку предел ограничивает ряды
то, что у меня есть, - это только дублированные ряды, как я могу нанести на стражу на каждой виллах < /p>
// this is the query
query := `
SELECT
v.id,
v.name,
v.description,
v.category_id,
v.location_id,
v.min_guest,
v.bedrooms,
v.baths,
v.price,
v.image_urls,
c.id,
c.name,
l.id,
l.area,
a.id,
a.name as amenity_name,
t.name as type_amenity,
v.created_at,
v.updated_at
FROM
villas v LEFT JOIN categories c ON v.category_id = c.id LEFT JOIN locations l ON v.location_id = l.id
LEFT JOIN villas_amenities va ON v.id = va.villa_id LEFT JOIN amenities a ON va.amenity_id = a.id
LEFT JOIN types t ON t.id = a.type_id
`
< /code>
// this is how i populate the rows:
ctx, cancel := context.WithTimeout(ctx, QueryTimeoutDuration)
defer cancel()
rows, err := v.db.QueryContext(ctx, query)
if err != nil {
return nil, err
}
defer rows.Close()
villas := []*Villa{}
villaMap := make(map[int]*Villa)
for rows.Next() {
villa := &Villa{}
amenity := &SelectedAmenity{}
rowUrls := []uint8{}
err := rows.Scan(
&villa.Id,
&villa.Name,
&villa.Description,
&villa.CategoryId,
&villa.LocationId,
&villa.MinGuest,
&villa.Bedrooms,
&villa.Baths,
&villa.Price,
&rowUrls,
&villa.Category.Id,
&villa.Category.Name,
&villa.Location.Id,
&villa.Location.Area,
&amenity.Id,
&amenity.Name,
&amenity.Type,
&villa.CreatedAt,
&villa.UpdateAt,
)
if err != nil {
return nil, err
}
err = json.Unmarshal(rowUrls, &villa.ImageUrls)
if err != nil {
return nil, err
}
// if the row not exist add not the map
if _, ok := villaMap[villa.Id]; !ok {
villaMap[villa.Id] = villa
}
// update the amenity with the result of the amenity row
villaMap[villa.Id].Amenity = append(villaMap[villa.Id].Amenity, *amenity)
}
// convert the map to slice
for _, val := range villaMap {
villas = append(villas, val)
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79678761/mysql-pagination-on-join-tables[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия