powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Разбить фотографии по столбцам
9 сообщений из 9, страница 1 из 1
Разбить фотографии по столбцам
    #40073770
Spawned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Прошу помочь, не могу найти адекватное решение для моей задачи. Есть таблица со столбцами
id, product_id, name, order, это список фотографий товаров. В столбце product_id указан id товара( может быть максимум 8 фотографий на товар), name - название картинки, order - очередь показа фотографии(1, 2, 3...8)
Мне необходимо получить таблицу вида product_id, name_1, name_2.... name_8, где в product_id - id товара, а в следующих 8 столбцах - названия картинок по порядку, указаному в столбце order(в целом, можно просто список без сортировки по order, если это усложняет задачу).
Пример таблицы:
id product_id name order
43442 1 pc211ev.png 3
32728 1 Pantum_PC-211EV.jpg 1
32729 1 Pantum_PC-211_EV.jpeg 2
32761 2 Pantum_PC-211RB.jpg 1
26459 3 _______________________-4004.jpg 1
33687 4 DEFENDER_ES_1.8m.jpg 1
25942 5 Moulinex_AT718A10.jpg 1
31527 6 LENOVO_110-15__80T7003MRK_.jpg 1
31528 6 LENOVO_110-15__80T7003MRK_-1.jpg 2
32929 7 Defender_Princeton_C-935.jpg 1
32930 7 Defender_Princeton_C-935-2.jpg 2
32931 7 Defender_Princeton_C-935-4.jpg 3
32932 7 Defender_Princeton_C-935-1.jpg 4
32944 8 DEFENDER_Berkeley_C-925.jpg 1
32945 8 DEFENDER_Berkeley_C-925-1.jpg 2
31709 9 Defender_Optimum_MB-150__52150_.jpg 1
31710 9 Defender_Optimum_MB-150__52150_-1.jpg 2
22582 10 INDESIT_SFR_167_NF.jpg 1
22583 10 INDESIT_SFR_167_NF.-1.jpg 2

Спасибо за любую помощь заранее
...
Рейтинг: 0 / 0
Разбить фотографии по столбцам
    #40073772
Агрох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Spawned,
А какие решения уже были и почему они неадекватные?
Зачем это нужно? Если потом будет отображаться в GUI (товар и 8 фото в строчку), то пусть GUI этим и занимается.
Что делать, если у товара всего одна фотография? А если потом их станет 15?
...
Рейтинг: 0 / 0
Разбить фотографии по столбцам
    #40073774
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это pivot. Эмулировать только разве - в хранимке или условной агрегацией.
...
Рейтинг: 0 / 0
Разбить фотографии по столбцам
    #40073778
Агрох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Это pivot. Эмулировать только разве - в хранимке или условной агрегацией.

Можно и через ROW_NUMBER:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
WITH R0 AS (
SELECT 1 AS ID, 1 AS P_ID, 123 AS f
UNION ALL
SELECT 2 AS ID, 1 AS P_ID, 234 AS f
), R1 AS (
SELECT
    P_ID,
    ROW_NUMBER() OVER(PARTITION BY P_ID ORDER BY f) AS RN,
    f
FROM R0
)
SELECT
    P_ID,
    MAX(CASE RN 
        WHEN 1 THEN f
        ELSE null
    END) AS f1,
    MAX(CASE RN 
        WHEN 2 THEN f
        ELSE null
    END) AS f2
FROM R1
GROUP BY P_ID




Но всё равно надо подумать на тему: а зачем?
...
Рейтинг: 0 / 0
Разбить фотографии по столбцам
    #40073784
Spawned
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Агрох
Akina
Это pivot. Эмулировать только разве - в хранимке или условной агрегацией.

Можно и через ROW_NUMBER:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
WITH R0 AS (
SELECT 1 AS ID, 1 AS P_ID, 123 AS f
UNION ALL
SELECT 2 AS ID, 1 AS P_ID, 234 AS f
), R1 AS (
SELECT
    P_ID,
    ROW_NUMBER() OVER(PARTITION BY P_ID ORDER BY f) AS RN,
    f
FROM R0
)
SELECT
    P_ID,
    MAX(CASE RN 
        WHEN 1 THEN f
        ELSE null
    END) AS f1,
    MAX(CASE RN 
        WHEN 2 THEN f
        ELSE null
    END) AS f2
FROM R1
GROUP BY P_ID




Но всё равно надо подумать на тему: а зачем?

БД меняется, нужно выгрузить названия фотографий и попросили именно в таком формате.
...
Рейтинг: 0 / 0
Разбить фотографии по столбцам
    #40073926
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агрох
Можно и через ROW_NUMBER:
Это вообще-то и называется условной агрегацией.

А комбинация полей (product_id, order) делает использование ROW_NUMBER ненужным.
...
Рейтинг: 0 / 0
Разбить фотографии по столбцам
    #40073928
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Разбить фотографии по столбцам
    #40074286
Агрох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Это вообще-то и называется условной агрегацией.


Давно это делал в MySQL. Разве там нет сппецсредств для разворота строк в поля, типа функции PIVOT()?
По крайней мере я помню, что использовал такую.
...
Рейтинг: 0 / 0
Разбить фотографии по столбцам
    #40074415
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агрох, нет. Это у SQL Server есть PIVOT.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Разбить фотографии по столбцам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]