Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapis danych do pliku csv
Forum PHP.pl > Forum > Przedszkole
ithat
Witam, mam problem z zapisem danych do pliku csv. Chciał bym wstawić do exportowanych danych z bazy, cos na zasadzie tabeli przestawnej z suma poszczególnych urządzeń jakie występują w danym zapytaniu. Przy wyświetlaniu samych rekordów wszystko działa jak należy, ale nie mam pomysłu jak wstawić owa "tabele przestawna" obok wczesniejszych rekordow. Próbowałem zastosować druga pętle, ale po wejsciu do niej, wypluwa wszystkie rekordy dotyczące tego zapytania, dopiero potem z niej wychodzi. Generalnie otrzymuje to co chce, tylko chciał bym aby rekordy z obu zapytań były obok siebie, a nie po sobie. Jestem początkujący i nie bardzo mam pomysł na inna metodę niż ta która niżej przedstawiam. Jakies pomysly ? Oto kod.

  1. $wynik2 = mysql_query("SELECT `urzadzenie`, COUNT(`urzadzenie`) as ilosc FROM `baza_zamowienia` WHERE klient = '{$_POST['dane']}' GROUP BY `urzadzenie` ORDER BY COUNT(`urzadzenie`) DESC");
  2. $wynik = mysql_query("SELECT * FROM baza_zamowienia WHERE klient = '{$_POST['dane']}'");
  3. $licznik = mysql_num_rows($wynik);
  4. }
  5. }
  6. $zapisz = fopen('eksport.csv', 'w');
  7.  
  8. while($r = mysql_fetch_object($wynik))
  9. {
  10. fwrite($zapisz, $r->sn.';'.$r->urzadzenie.';'.$r->zamowienie.';'.$r->klient.';'.$r->nr_faktury.';'.$r->data.";");
  11. while($r2 = mysql_fetch_object($wynik2))
  12. {
  13. fwrite($zapisz, $r2->urzadzenie.';'.$r2->ilosc.";\n");
  14. }
  15. fwrite($zapisz,";\n");
  16.  
  17.  
  18. }
  19.  
  20. fclose($zapisz);

pozdrawiam Ithat
nospor
Skoro chcesz obok siebie to nie:
  1. fwrite($zapisz, $r->sn.';'.$r->urzadzenie.';'.$r->zamowienie.';'.$r->klient.';'.$r->nr_faktury.';'.$r->data.";");
  2. while($r2 = mysql_fetch_object($wynik2))
  3. {
  4. fwrite($zapisz, $r2->urzadzenie.';'.$r2->ilosc.";\n");
  5. }

a:
  1. while($r2 = mysql_fetch_object($wynik2))
  2. {
  3. fwrite($zapisz, $r->sn.';'.$r->urzadzenie.';'.$r->zamowienie.';'.$r->klient.';'.$r->nr_faktury.';'.$r->data.";");
  4.  
  5. fwrite($zapisz, $r2->urzadzenie.';'.$r2->ilosc.";\n");
  6. }
ithat
Jednak przedwczesna radosc, w ten sposob za kazdym razem zwroci ten sam rekord z $wynik oraz wyswietli tyle rekordow ile ma tabela przestawna, a ma ona o wiele mniej rekordow niz rekordy z $wynik
nospor
No ale przecież ty te dwa zapytania, każde do oddzielnej tabeli, możesz połączyć w jedno zapytanie przy pomocy LEFT JOIN
ithat
zapytanie jest do jednej tabeli, i raczej nie da sie tego sformułować w jednym zapytaniu uzywajac klauzuli count bo niby jak

pierwsze zapytanie zwraca mi wszystkie rekordy od jednego klienta czyli jakie urzadzenia kupil, a drugie sumuje jei zwraca ile jest urzadzen poszczegolnego typu

Poradziłem sobie chyba najbardziej łopatologiczna metoda, użyłem instrukcji goto. Najważniejsze ze działa tak jak chcialem. Oto kod:
  1. $wynik2 = mysql_query("SELECT `urzadzenie`, COUNT(`urzadzenie`) as ilosc FROM `baza_zamowienia` WHERE klient = '{$_POST['dane']}' GROUP BY `urzadzenie` ORDER BY COUNT(`urzadzenie`) DESC");
  2. $wynik = mysql_query("SELECT * FROM baza_zamowienia WHERE klient = '{$_POST['dane']}'");
  3. $licznik = mysql_num_rows($wynik);
  4. }
  5. }
  6. $zapisz = fopen('eksport.csv', 'w');
  7.  
  8. while($r = mysql_fetch_object($wynik))
  9. {
  10. fwrite($zapisz, $r->sn.';'.$r->urzadzenie.';'.$r->zamowienie.';'.$r->klient.';'.$r->nr_faktury.';'.$r->data.';'.';'.';');
  11. while($r2 = mysql_fetch_object($wynik2))
  12. {
  13. fwrite($zapisz, $r2->urzadzenie.';'.$r2->ilosc.";");
  14. goto a;
  15. }a:
  16. fwrite($zapisz,";\n");
  17.  
  18.  
  19. }
  20.  
  21. fclose($zapisz);
matiit
Zamiast goto w tym miejscu nie możesz użyć break?
ithat
Tak moge, nie pomyslalem o tym wink.gif
dzieki za odpowiedzi
pozdrawiam
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.