Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Jak wyciągnąć dane ?
boddah85
post
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 4
Dołączył: 31.07.2006

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


Witam

Pytanie w temacie może niezbyt dobrze sformułowane, ale innego pomysłu nie miałem. Przejdę jednak do sedna.

Mam tabelę :

produkt_id | ilosc | magazyn
----------------------------------
1 | 2 | MAG1
1 | 3 | MAG2
1 | 4 | MAG3
2 | 1 | MAG1
2 | 1 | MAG2
2 | 2 | MAG3
3 | 8 | MAG1
3 | 1 | MAG3

W efekcie chciałbym uzyskać sumę każdego produktu z wszystkich magazynów oraz ilość przypadającą tylko na konkretny magazyn.

Czyli np. dla MAG2

prod_id|suma_wszystkie_mag|ilosc_na_mag_MAG2
---------------------------------
1 | 9 | 3
2 | 4 | 1
3 | 9 | 0

Mam nadzieję, że zrozumieliście (IMG:style_emoticons/default/winksmiley.jpg) Z góry dzięki za pomoc.
Go to the top of the page
+Quote Post
sadistic_son
post
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Dla wszystkich magazynow:
  1. SELECT COUNT(produkt_id) FROM tabela
Dla konkretnego magazynu:
  1. SELECT COUNT(produkt_id) FROM tabela WHERE magazyn='MAG2'

Ale jeszcze wazna sprawa. Jesli rzeczywiscie tak wygladaja dane, ze w kazdym rekordie masz powtarzane MAG1, MAG2, MAG3 itp. to jest to zle skonstruowana baza. W takim wypadku powinienes stworzyc tabele 'magazyny' : id, nazwa i tam wpisac wszystkie magazyny a w tej pierwszej tabeli wpisywac tylko id danego magazynu.

Ten post edytował sadistic_son 21.10.2010, 15:24:38
Go to the top of the page
+Quote Post
boddah85
post
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 4
Dołączył: 31.07.2006

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


Dzięki za odpowiedź ale...

1) W dwóch zapytaniach nie mam problemu, żeby to zrobić, ale myślałem, że może da się to zrobić w jednym
2) I tak chyba nie do końca zostałem zrozumiany.

Dla wszystkich magazynów zrobiłbym tak :
  1. SELECT produkt_id,SUM(ilosc) FROM tabela GROUP BY produkt_id


Dla danego magazynu wyglądałoby to :
  1. SELECT produkt_id,ilosc FROM tabela WHERE magazyn = 'MAG2'


Jak już jednak powiedziałem - podejrzewałem, że można to zrobić lepiej.

Baza wygląda inaczej, ale dla uproszczenia przedstawiłem to w takiej postaci.

Ten post edytował boddah85 21.10.2010, 15:50:58
Go to the top of the page
+Quote Post
poli25
post
Post #4





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


spróbuj wiec tak:
select a.id_product,a.magazyn,
(select sum(ilosc) from magazyny where product_id=a.product_id),
(select sum(ilosc) from magazyny where magazyn=a.magazyn and product_id=a.product_id)
from magazyny a where magazyn=$magazyn_nr

z pamieci pisze wiec jakby nie działalo to przeslij mi zrzut z bazy (IMG:style_emoticons/default/winksmiley.jpg)

jakby co to pisz do mnie na gg 10652868 pozdr.


p.s. ilosc na magazynie 2 chcesz 0? dla produktu 3?
to wtredy tak :
select a.id_produkt,
(select sum(ilosc) from magazyny where id_produkt=a.id_produkt),
coalesce((select sum(ilosc) from magazyny where magazyn_nr='$mag2' and id_produkt=a.id_produkt),0)

from magazyny a
group by id_produkt order by 1

Ten post edytował poli25 22.10.2010, 07:28:02
Go to the top of the page
+Quote Post
boddah85
post
Post #5





Grupa: Zarejestrowani
Postów: 72
Pomógł: 4
Dołączył: 31.07.2006

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


Twoja pierwsza podpowiedź już mnie naprowadziła na rozwiązanie. Serdeczne dzięki (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 25.12.2025 - 13:49