Заказывайте на основе атрибутов товара доступности и наличия на складе mysql

#mysql

Вопрос:

У меня есть две таблицы продукты и атрибуты продукта

 products
id       product_name     
1             P1
2             P2
3             P3

product_attributes
id    product_id     size    stock
1          1          S        10
2          1          M        0
3          1          L        0
4          2          S        1
5          2          M        2
6          2          L        1
7          3          S        1
8          3          M        1

My expected output is like below:-
product_id    product_name
 2                 P2
 3                 P3
 1                 P1
 

Поэтому в основном я хочу, чтобы продукты в верхней имея в наличии все товары такие атрибуты, как Р2 имея в наличии все атрибуты и акциям сумма 4 и если вы видите Р3 также имея все атрибуты продукта, но суммой менее P2, который является только 2 и P1 пойдет вниз, потому что я не есть запас.

 select id as product_id, product_name from products Order BY ....
 

Может ли кто-нибудь помочь мне добиться того же самого?

Комментарии:

1. что вы пытались сделать до сих пор, чтобы решить эту проблему?

2. я пытаюсь выполнить подзапрос в порядке, но не работает

Ответ №1:

В глубине души, я думаю, вы, вероятно, ищете что-то большее, чем это…

 DROP TABLE IF EXISTS products;

CREATE TABLE products
(id SERIAL PRIMARY KEY
,product_name CHAR(2) NOT NULL
);

INSERT INTO products VALUES
(1,'P1'),
(2,'P2'),
(3,'P3');

DROP TABLE IF EXISTS product_attributes;

CREATE TABLE product_attributes
(id SERIAL PRIMARY KEY
,product_id INT NOT NULL
,size CHAR(1) NOT NULL
,stock INT NOT NULL
);

INSERT INTO product_attributes VALUES
(1,1,'S',10),
(2,1,'M', 0),
(3,1,'L', 0),
(4,2,'S', 1),
(5,2,'M', 2),
(6,2,'L', 1),
(7,3,'S', 1),
(8,3,'M', 1);


 SELECT product_id
   FROM product_attributes
  WHERE stock <> 0
  GROUP
     BY product_id
  ORDER
     BY COUNT(DISTINCT size) DESC;
 ------------ 
| product_id |
 ------------ 
|          2 |
|          3 |
|          1 |
 ------------