Оператор SQL, который организует серию элементов, по одному на набор - PullRequest
0 голосов
/ 18 мая 2018

Я хотел бы написать заявление sql, в котором перечислены серии продуктов, принадлежащих к наборам, которые должны быть заказаны по одному на каждый набор, и список всех продуктов.

Мои продукты организованы следующим образом.

Набор 01 Продукт 01Продукт 02Продукт 03

Набор 02 Продукт 06Продукт 07Продукт 08Продукт 09

Набор 03 Продукт 11Продукт 12Продукт 13Продукт 14Продукт 15

Я хотел бы создать SQL-запрос, который организует их так:

Set 01 - Product 01 Набор 02 - Продукт 06 Набор 03 - Продукт 11 Набор 01 - Продукт 02 Набор 02 - Продукт 07 Набор 03 - Продукт 12 Набор 01 - Продукт 03 Набор 02 - Продукт 08 Набор 03 - Продукт 13 Комплект 02 - Продукт 09 Набор 03 - Продукт 14 Набор 03 - Продукт 15

Я могу получить запрос продуктов, сгруппированных по набору, но не могу получить один для набора.

select 
       `product_set`.`product_id`, 
       `product_set`.`set_id`,
       `product_set`.`order` 
from 
       `product_set` 
inner join 
       `sets` 
on  
       `product_set`.`set_id` = `sets`.`id` 
where 
       `condition` = true

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

В принципе, вы можете перечислить значения, установив:

select ps.*
from (select ps.*,
             (@rn := if(@s = set_id, @rn + 1,
                        if(@s := set_id, 1, 1)
                       )
             ) as rn
      from (select ps.product_id, ps.set_id, ps.order 
            from product_set ps join 
                 sets s
                 on ps.set_id = s.id
            where s.conditionk = true
            order by ps.set_id, ps.order
           ) ps cross join
           (select @s := -1, @rn := 0) params
      ) ps
order by rn, set_id;
0 голосов
/ 18 мая 2018

Посмотрите на этот ответ: https://stackoverflow.com/a/532941/4770578

Вам нужно сделать что-то вроде:

SELECT * FROM (
    SELECT product_id, set_id,
        @product:=CASE WHEN @set <> set_id THEN 0 ELSE @product+1 END AS rn,
        @set:=set_id AS r_set
    FROM
        (SELECT @product:= -1) s,
        (SELECT @set:= -1) c,
        (SELECT *
            FROM product_sets
            ORDER BY set_id, product_id
        ) t
    ) t1
ORDER BY rn, set_id, product_id;

Создание номеров строк для каждой из ваших строк, а затем сортировка по этим номерам строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...