Zapytanie do 3 tabel i update

0

Cześć,
mam do Was 2 pytanka:

  1. Posiadam baze gdzie znajduja sie produkty, ich rozmiary oraz ilosci tych rozmiarow.

Chcialbym stworzyc takie zapytanie, ktore pokaze id produktu, rozmiar oraz ilosc w tym rozmiarze. Do tej pory mam takie cos np dla id 119:

SELECT p.id_product, sa.quantity
FROM ps_product p 
INNER JOIN ps_stock_available sa ON p.id_product = sa.id_product
WHERE p.id_product = 119

Dzieki temu moge wyswietlic id produktu oraz ilosci dla poszczegolnych rozmiarow:

screenshot-20180529122232.png

Chcialbym do tego jeszcze dodac nazwe rozmiaru. Rozmiary przechowywane sa w tabeli ps_attribute_lang:

screenshot-20180529122425.png

W tabeli ps_stock_available ID z powyższej tabeli przechowywane jest w polu id_product_attribute.

Czy pomożecie mi zmodyfikować moje zapytanie żeby otrzymać cos w tym stylu?

id_product | quantity | name
119           |      123  |   XS
  1. Bazujac na powyzszych strukturach jak skonstruowac zapytanie zeby moc zmienic ilosc znajac id produktu oraz rozmiar np 'xs'?

Bardzo Was prosze o pomoc.

0

Wrzuć przykładowe dane na sqlfiddle

1

Poniższe pokaże Ci dodatkowo nazwe atrybutu (użyłem LEFT JOIN gdyby jakimś cudem okazało się, że nie ma nazwy w tablicy a jest stan):

SELECT p.id_product, sa.quantity, at.name
FROM ps_product p 
INNER JOIN ps_stock_available sa ON p.id_product = sa.id_product
LEFT JOIN ps_attribute_lang at ON at.Id_attribute = sa.id_product_attribute
WHERE p.id_product = 119

Update:

UPDATE ps_stock_available
SET quantity = 667
FROM ps_stock_available sa
LEFT JOIN ps_attribute_lang at ON at.Id_attribute = sa.id_product_attribute

WHERE sa.id_product = 119
AND at.name = 'xs'
0

http://sqlfiddle.com/#!9/9e89c8/1

I teraz najważniejsze co mnie interesuje czyli punkt 2.

Jak zmienic ilosc (100) np na 200 w sytuacji kiedy znam id produktu (119) oraz, ze rozmiar to 'xs'.

Prosze o pomoc:)

1

Tak:

update 
    ps_stock_available psa
    inner join ps_attribute_lang pal on pal.id_attribute=psa.id_product_attribute
set 
    psa.quantity=101
where 
    pal.name = 'xs'
    and psa.id_product=119
  
0

Dzięki Panowie za odpowiedzi. Okazało się, że trochę namieszałem z opisem ale na podstawie Waszych odpowiedzi udało mi się ogarnąć sytuację :)
Jeszcze raz wielkie dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1