Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zliczenie stanu produktów / złączenie tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
zielinskit
Witam, mam taką sytuację:



Potrzebuję zapytania, które wypluje mi produkty i zliczy stan P-R (pzychód i rozchód) z tabeli detale.
Odziedziczyłem takie ustrojstwo i nie mogę zmienić struktury tabel.
Pyton_000
Nie pomożemy
zielinskit
Mam rozumieć, że to technicznie niemożliwe przez pojedyncze zapytanie SQL ?
Obecnie jest to rozwiązane w taki sposób, że aż wstyd pokazać. Miałem nadzieję, że
da się to zrealizować bardziej profesjinalnie. Trudno.
mar1aczi
Pokaż co masz i napisz co chciałbyś zmienić.
Turson
Cytat(zielinskit @ 27.06.2014, 12:07:23 ) *
Mam rozumieć, że to technicznie niemożliwe przez pojedyncze zapytanie SQL ?
Obecnie jest to rozwiązane w taki sposób, że aż wstyd pokazać. Miałem nadzieję, że
da się to zrealizować bardziej profesjinalnie. Trudno.

JOIN Detale.IdProd = Produkty.IdProd
vermis
Czyli wg Ciebie mniejsza ilość zapytań oznacza większy profesjonalizm?

Jeśli masz rozchód to pomnóż razy -1 i zsumuj grupując po id produktu.
zielinskit
Tak jest to rozwiązane obecnie, dla 200 produktów wynik wypluwa po 5 s.

  1. <?php
  2. $aQuery="select distinct Symbol,IdAso from produkty order by Symbol";
  3. $aQResult = mysql_query( $aQuery, $aDBLink );
  4. if ( $aQResult == True )
  5. {
  6. while ( $aRow = mysql_fetch_array( $aQResult ) )
  7. {
  8. $idaso=$aRow["IdAso"];
  9. $symbol=$aRow["Symbol"];
  10. $bQuery="select * from detale where IdAso=$idaso ";
  11. $bQResult=mysql_query($bQuery,$aDBLink);
  12. if ($bQResult==true)
  13. {
  14. $sum_p=0;
  15. $sum_r=0;
  16. while ($bRow=mysql_fetch_array($bQResult))
  17. {
  18. $pr=$bRow["PR"];
  19. $ilosc=$bRow["Ilosc"];
  20. if ($pr=="P")
  21. {
  22. $sum_p+=$ilosc;
  23. }
  24. else
  25. {
  26. $sum_r+=$ilosc;
  27. }
  28. }
  29. $stan=$sum_p-$sum_r;
  30. }
  31. }
  32. }
  33. ?>
Turson
Już napisałem, żebyś złączył tabele JOINem. Nałóż indeksy na kolumny
zielinskit
Właśnie chodzi o to, że nie potrafię tego dobrze złączyć joinem, dlatego proszę o pomoc.
Turson
  1. SELECT * FROM Detale JOIN Produkty ON Produkty.IdProd=Detale.IdProd
zielinskit
Chyba się nie rozumiemy, w jaki sposób takie złączenie ma mi pomóc ?

Takie zapytanie:
  1. SELECT p.Symbol,d.Ilosc FROM detale d JOIN produkty p ON p.IdAso=d.IdAso GROUP BY p.Symbol


się nie sprawdza, ponieważ w tabeli detale kolumna Ilosc zawiera dane o przychodach i rozchodach a rozróżnikiem
jest kolumna PR (dla przychodu P, dla rozchodu R).
Pyton_000
  1. SELECT *, SUM(IF(PR='p', ilosc, ilosc*-1)) FROM pr GROUP BY idProd

Dalej sobie poradzisz
zielinskit
Dziękuję bardzo za okazaną pomoc. Temat zamknięty.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.