Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Разбить фотографии по столбцам  [new]
Spawned
Member

Откуда:
Сообщений: 2
Добрый день! Прошу помочь, не могу найти адекватное решение для моей задачи. Есть таблица со столбцами
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

Спасибо за любую помощь заранее
28 май 21, 12:06    [22328397]     Ответить | Цитировать Сообщить модератору
 Re: Разбить фотографии по столбцам  [new]
Агрох
Member

Откуда:
Сообщений: 110
Spawned,
А какие решения уже были и почему они неадекватные?
Зачем это нужно? Если потом будет отображаться в GUI (товар и 8 фото в строчку), то пусть GUI этим и занимается.
Что делать, если у товара всего одна фотография? А если потом их станет 15?
28 май 21, 12:49    [22328402]     Ответить | Цитировать Сообщить модератору
 Re: Разбить фотографии по столбцам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21200
Это pivot. Эмулировать только разве - в хранимке или условной агрегацией.
28 май 21, 12:58    [22328405]     Ответить | Цитировать Сообщить модератору
 Re: Разбить фотографии по столбцам  [new]
Агрох
Member

Откуда:
Сообщений: 110
Akina
Это pivot. Эмулировать только разве - в хранимке или условной агрегацией.

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

+

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



Но всё равно надо подумать на тему: а зачем?
28 май 21, 13:17    [22328410]     Ответить | Цитировать Сообщить модератору
 Re: Разбить фотографии по столбцам  [new]
Spawned
Member

Откуда:
Сообщений: 2
Агрох
Akina
Это pivot. Эмулировать только разве - в хранимке или условной агрегацией.

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

+

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



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

БД меняется, нужно выгрузить названия фотографий и попросили именно в таком формате.
28 май 21, 13:36    [22328419]     Ответить | Цитировать Сообщить модератору
 Re: Разбить фотографии по столбцам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21200
Агрох
Можно и через ROW_NUMBER:
Это вообще-то и называется условной агрегацией.

А комбинация полей (product_id, order) делает использование ROW_NUMBER ненужным.
28 май 21, 19:11    [22328635]     Ответить | Цитировать Сообщить модератору
 Re: Разбить фотографии по столбцам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21200
PIVOT средствами MySQL
28 май 21, 19:11    [22328637]     Ответить | Цитировать Сообщить модератору
 Re: Разбить фотографии по столбцам  [new]
Агрох
Member

Откуда:
Сообщений: 110
Akina
Это вообще-то и называется условной агрегацией.


Давно это делал в MySQL. Разве там нет сппецсредств для разворота строк в поля, типа функции PIVOT()?
По крайней мере я помню, что использовал такую.
31 май 21, 10:14    [22329154]     Ответить | Цитировать Сообщить модератору
 Re: Разбить фотографии по столбцам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21200
Агрох, нет. Это у SQL Server есть PIVOT.
31 май 21, 15:22    [22329385]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить