Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dwie pętle
Forum PHP.pl > Forum > PHP
Mateostin
Witam, temat był już poruszany natomiast nie potrafię dopasować tego pod siebie mam taki kod:

  1. <?php
  2.  
  3. echo "";
  4. echo "<table class='zaznaczenie'>";
  5. echo "<tr style='background-color: #FFEBCD; padding: 2;'> <th WIDTH=6%>Materiał</th> <th WIDTH=6% title='Numer Zlecenia'>Ilosc</th> <th>jednostka</th> <th>Ilosc PROD</th> </tr>";
  6.  
  7. $connect = mysqli_connect(tutaj się łącze :) );
  8. $zapytanie = "SELECT SUM(iloscrec*ilosc/100) AS iloscsur, surowiec, Produkt FROM receptura JOIN produkcjadb ON(produkcjadb.Produkt = receptura.kolor) WHERE data_zakonczenia >= CURRENT_DATE GROUP BY surowiec"
  9. $resultprod = mysqli_query($connect, $zapytanie);
  10. while($dana = mysqli_fetch_assoc($resultprod))
  11. {
  12.  
  13. $zmiennailoscsur = sprintf('%.3f', $dana['iloscsur']);
  14. echo ''.$dana['surowiec'].' ---- '.$zmiennailoscsur.' </br>';
  15. }
  16.  
  17. ?>
  18. <?php
  19.  
  20. $connect = mysqli_connect(tutaj się łącze :) );
  21. $zapytanie = "SELECT SUM(ilosccal) AS ilosc, material, jednostka FROM surowce WHERE magazyn='G' || magazyn='K' || magazyn='S' || magazyn='P' || magazyn='PROUT' || magazyn='W' || magazyn='OR' GROUP BY material"
  22. $result = mysqli_query($connect, $zapytanie);
  23. while($dana = mysqli_fetch_assoc($result))
  24. {
  25. $zmienna = sprintf('%.3f', $dana['ilosc']);
  26. echo "";
  27. echo "<tr style='background-color: #FFFFF0'>";
  28. echo '<td>' . $dana['material'] . '</td>';
  29. echo '<td>'.$zmienna.'</td>';
  30. echo '<td>'.$dana['jednostka'].'</td>';
  31. echo "</tr>";
  32. }
  33.  
  34. ?>



i teraz pytanie czy moge jakos zrobic tak zeby wyniki z pierwszej petli przyporządkowało mi do drugiej pętli gdzie $dana['material'] z drugiej petli = $dana['surowiec'] z pierwszej pętli?

Dobra poradziłem sobie zwykłym ifem, natomiast to chyba zabije serwer, da się zrobić jakoś żeby tylko wpisywało wartość dla tych które występują 1 petli a te które nie żeby dawało w tabeli 0 bądź - ?

Ma ktos chociaż jakąs wskazowke?
nospor
dodaj do glownego zapytania LEFT JOIN surowce i po sprawie
Mateostin
ale główne zapytanie pochodzi z tabeli surowce problem w tym ze nie potrafie pogodzić tego zapytania z receptur i produkcjadb
nospor
Chciales wskazowke, dostales wskazowke. Ja tam tez nie jestem w stanie nic wiecej wymyslec nie majac struktur tabel ani opisu co sie z czym i jak laczy. Magic does not exist wink.gif
Mateostin
Dobra spróbuje to jakoś naświetlić:

mam produkcjadb

produkt | ilosc
aaa | 2
bbb | 3
ccc | 3

mam tabele receptura

surowiec | iloscrec | kolor
nazwasur | 1.44 | aaa
nazwasur1 | 3.64 | aaa
nazwasur2 | 5.34 | bbb


oraz tabele surowce
surowiec | ilosc | magazyn
nazwasur | 5 | g
nazwasur1 | 6 | g
nazwasur2 | 1 | g
nazwasur | 2 | s
nazwasur4 | 3 | s
nazwasur | 4 | k


i teraz potrzebuje wyswietlić w jednej tabeli
wszystkie materiały z tabeli surowcowej zliczone wedlug magazynu- to zrobilem
dodatkowo wyswietlić obok ilość surowca ktora wchodzi w skład materiałów do produkcji wykonując działanie jak w moim drugim zapytaniu MYSQL natomiast nie potrafie tego wsadzić w jedna tabele... bo oddzielnie to nie ma problemu tak jak w pierwszym poscie... bo robie dwie oddzielne petle i mam wszystko
jezeli moj tok myslenia jest bledny i na to powinno sie użyć innych opcji to prosiłbym aby ktoś mnie nakierował

bo zalezy mi na tym aby wynik z pierwszej petli porownać do drugiej petli gdzie materiał=surowiec gdzie material!=surowiec wyswietl 0 i za chiny nie umiem... tworzy mi sie potezna petla ktorej zaladowanie trwa trzy dni...
nospor
No to tak jak mowilem: do glownego zapytania dodajesz LEFT JOIN do trzeciej tabeli. I masz wowczas tylko jedno to zapytanie. zadnych wiecej zapytan.

Wyswietl sobie co to zapytanie bedzie zwracac - moze lepiej zrozumiesz.
Potem to juz tylko grupujesz w php i wyswietlasz sobie jak chcesz.

Jak grupowac tego typu rzeczy opisywalem tu:
http://nospor.pl/grupowanie-wynikow.html
Idea ta sama
Mateostin
Dziękuje bardzo nospor bede walczył i moze cos się uda!

Witam ponownie a gdybym zrobił takim wzorcem?

  1. SELECT wartość
  2. FROM (SELECT SUM(iloscrec*ilosc/100) AS iloscsur, surowiec, Produkt
  3. FROM receptura
  4. JOIN produkcjadb ON(produkcjadb.Produkt = receptura.kolor)
  5. WHERE data_zakonczenia >= CURRENT_DATE
  6. GROUP BY surowiec
  7. ) surowce JOIN (
  8. SELECT SUM(ilosccal) AS ilosc, material, jednostka
  9. FROM surowce
  10. WHERE magazyn='G' || magazyn='K' || magazyn='S' || magazyn='P' || magazyn='PROUT' || magazyn='W' || magazyn='OR'
  11. GROUP BY material
  12. ) receptura
  13. ON surowiec.material = receptura.surowiec

czy takie cos ma sens?
i jeszcze jedno pytanie bo dostałem wskazowke w funkcją LEFT JOIN a nie lepsza jest funkcja LEFT OUTER JOIN?
przy okazji nie wiem dobrze zbudowałem te subquery... jezeli cos źle czy mogłby mnie ktos poprawic?

Jednak jeszcze jedno pytanie....na jakiej zasadzie działają widoki w PHPMYADMIN?
nospor
O co ci chodzi z widokami w phpmyadmin? Widoki to jest mysql sprawa a nie PMA. Rownie dobrze mozesz zapytac jak dzialaja tabele w PMA wink.gif
viking
Widoki to po krótce zapisane zapytania. W Mysql mocno ograniczone (jak wszystko w tym badziewnym systemie, nie ma np natywnej obsługi zmaterializowanych widoków). LEFT JOIN to właśnie LEFT OUTER JOIN więc nie wiem kto takie bzdury nagadał. Tak samo jak nie musisz pisać INNER JOIN tylko samo JOIN.
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.