Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zapis danych do pliku csv, problem
ithat
post 10.04.2013, 11:02:24
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 9.01.2013

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


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

Ten post edytował ithat 10.04.2013, 11:03:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post 10.04.2013, 11:06:33
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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. }


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ithat
post 10.04.2013, 11:11:13
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 9.01.2013

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


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

Ten post edytował ithat 10.04.2013, 11:20:02
Go to the top of the page
+Quote Post
nospor
post 10.04.2013, 11:34:47
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale przecież ty te dwa zapytania, każde do oddzielnej tabeli, możesz połączyć w jedno zapytanie przy pomocy LEFT JOIN


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ithat
post 10.04.2013, 14:01:16
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 9.01.2013

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


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);


Ten post edytował ithat 10.04.2013, 11:42:01
Go to the top of the page
+Quote Post
matiit
post 10.04.2013, 14:05:40
Post #6





Grupa: Zarejestrowani
Postów: 365
Pomógł: 70
Dołączył: 5.04.2009

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


Zamiast goto w tym miejscu nie możesz użyć break?
Go to the top of the page
+Quote Post
ithat
post 11.04.2013, 09:10:52
Post #7





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 9.01.2013

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


Tak moge, nie pomyslalem o tym wink.gif
dzieki za odpowiedzi
pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.06.2025 - 18:19