Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Subselect w jednej tabeli, Wyświetlić listę produktów z sumowaną ilością towaru
bojak
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 16.02.2016

Ostrzeżenie: (0%)
-----


Witam.

Na wstępie powiem, że do tej pory jakość sobie radziłem z różnymi problemami, ale.. brak mi pomysłu i trochę czas nagli (jest wiele osób, które posiadają ten sam sklep (Shoper lub ClikShop) i ten sam problem, a aktualizacja z poprawką tego szybko pewnie nie nadejdzie znając życie). Nie liczę na gotowe rozwiązanie a chociaż na pokazanie mi drogi do rozwiązania.

Mam sklep internetowy ale niestety nie aktualizują się stany magazynowe produktu głównego na podstawie wariantów. chciałbym:
1. uzyskać listę produktów, które należy zaktualizować - lista muszę wyeksportować do pliku tylko sam product_id w przypadku gdy suma magazynowa wariantów jest różna od stanu magazynowego produktu głównego
2. aktualizacja stanu magazynowego na podstawie stanu magazynowego wariantów

Do rzeczy. Struktura tabeli (część).
  1. mysql> SELECT `product_id` , `stock`, extended FROM products_stock;


+------------+-------+----------+
| product_id | stock | extended |
+------------+-------+----------+
| 110 | 7 | 0 |
| 110 | 1 | 1 |
| 110 | 1 | 1 |
| 112 | 5 | 0 |
| 112 | 0 | 1 |
| 113 | 9 | 0 |
| 113 | 2 | 1 |
| 113 | 1 | 1 |
| 113 | 2 | 1 |
| 113 | 2 | 1 |
| 115 | 4 | 0 |
| 115 | 1 | 1 |
| 115 | 1 | 1 |
| 115 | 2 | 1 |

extended =0 - produkt główny, 1-wariant produktu

wymyśliłem zapytanie (Osobne zapytania działają, ale nie wiem jak je połączyć w całość):
  1. SELECT `product_id`,stock,(SELECT sum(stock) FROM products_stock WHERE extended=1 GROUP BY product_id)
  2. FROM products_stock
  3. WHERE extended=0
  4. GROUP BY product_id


chciałem chociaż uzyskać wynik produck_id, stock (główny), sum(stock - wariantów)

ale było by to zbyt piękne by się udało - wynik wyszedł spodziewany - subquery returns more then 1 row.
wynika to z tego, że nie wszystkie produkty główne mają warianty (czyli są product_id gdzie brak jest extended=1)

Rozważałem też wynik z
  1. SELECT `product_id`,sum(stock) FROM products_stock WHERE extended=1 GROUP BY product_id

zrobić jako tabelę tymczasową (macierz), ale zależy mi na jak najprostszym rozwiązaniu - skrypt będzie uruchamiany co 15-30 minut

Co podobnego już robiłem, ale jak pewne rzeczy robi się raz na rok to się tego nie pamięta.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kapslokk
post
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. SELECT
  2. x.product_id,
  3. x.stock AS IloscGlownego,
  4. sum(x1.stock) AS IloscWariantow,
  5. (x.stock + sum(x1.stock)) AS Razem
  6. FROM XX x
  7. LEFT JOIN XX x1 ON
  8. x.product_id = x1.product_id &&
  9. x1.`extended` = 1
  10. WHERE x.`extended` = 0 GROUP BY product_id;


http://sqlfiddle.com/#!9/170eb/8
O coś takiego chodzi? Jeśli nie to podaj prawidłową tablicę wyjściową dla danych z pierwszego postu.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 08:09