Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Export ostatnich rekordów z kilku tabel do pliku csv
brzanek
post
Post #1





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Witam potrzebna mi pomoc w eksportowanie ostatnich rekordów z kilkunastu tabel do pliku csv.
W bazie danych mam kilka tabel z miejscowościami i temperaturami np:
Tabela szczecin
id tempmax tempmin
25 2,1 -4

Tabela koszalin
id tempmax tempmin
27 3,1 -2.1
To jest ostatni rekord z tej tabeli. Tak samo wyglądają inne tabele dla innych miejscowości. Jak mogę zapisać ostatnie rekordy z tych tabel do pliku csv przez php.
Format jaki powinien być w pliku csv powinien wyglądać tak:
tempmax tempmin miejscowosc
2.1; -4; szczecin
3.1; -2.1; koszalin
itd.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Jeśli id jest autonumerem i ostatni rekord ma najwyższe id, to:

  1. SELECT tempmax,tempmin,'szczecin' FROM szczecin ORDER BY id DESC LIMIT 0,1
  2. UNION
  3. SELECT tempmax,tempmin,'koszalin' FROM koszalin ORDER BY id DESC LIMIT 0,1
  4. UNION
  5. ....


Możesz do te generacji tego zapytania użyć pętli w php.

P.S. A przy okazji, nie możesz zmienić struktury bazy i przechowywać danych w jednej tabeli?

Ten post edytował trueblue 14.02.2016, 08:43:59
Go to the top of the page
+Quote Post
brzanek
post
Post #3





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Wiem jak pobrać te dane z bazy ale teraz jak zapisać je do pliku csv na komputerze w takiej formie jak podałem.
Nie chcę zmieniać już struktury bazy danych.
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


http://www.w3schools.com/php/func_filesystem_fputcsv.asp
Go to the top of the page
+Quote Post
brzanek
post
Post #5





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Cytat(trueblue @ 14.02.2016, 10:10:52 ) *

Nie bardzo to rozumiem.
Zrobiłem coś takiego ale nie działa
  1. <?php
  2. if (!defined("IN_FUSION")) { die("Access Denied"); }
  3. $con=mysql_connect('localhost','login','pass');
  4. mysql_select_db("nazwa_bazy_danych", $con);
  5. mysql_query("SET CHARSET utf8");
  6.  
  7. $query = "
  8. (SELECT CONCAT('Białogard'), tempmax,tempmin,data FROM bialogard ORDER BY id DESC LIMIT 0,1)
  9. UNION
  10. (SELECT CONCAT('Chojna'), tempmax,tempmin,data FROM chojna ORDER BY id DESC LIMIT 0,1)
  11. UNION
  12. (SELECT CONCAT('Darłówek'), tempmax,tempmin,data FROM darlowek ORDER BY id DESC LIMIT 0,1)
  13. UNION
  14. (SELECT CONCAT('Drawsko'), tempmax,tempmin,data FROM drawsko ORDER BY id DESC LIMIT 0,1)
  15. UNION
  16. (SELECT CONCAT('Gryfice'), tempmax,tempmin,data FROM gryfice ORDER BY id DESC LIMIT 0,1)
  17. UNION
  18. (SELECT CONCAT('Gryfino'), tempmax,tempmin,data FROM gryfino ORDER BY id DESC LIMIT 0,1)
  19. UNION
  20. (SELECT CONCAT('Kamień'), tempmax,tempmin,data FROM kamien ORDER BY id DESC LIMIT 0,1)
  21. UNION
  22. (SELECT CONCAT('Kołobrzeg'), tempmax,tempmin,data FROM kolobrzeg ORDER BY id DESC LIMIT 0,1)
  23. UNION
  24. (SELECT CONCAT('Szczecin'), tempmax,tempmin,data FROM szczecin ORDER BY id DESC LIMIT 0,1)
  25. UNION
  26. (SELECT CONCAT('Choszczno'), tempmax,tempmin,data FROM choszczno ORDER BY id DESC LIMIT 0,1)";
  27. $result = mysql_query($query) or die(mysql_error());
  28. while($row = mysql_fetch_array($result)){
  29. $list = array
  30. (
  31. echo "".$row['tempmax'].";".$row['tempmin'].";".$row['0'].";";
  32. );
  33. }
  34. $file = fopen("contacts.csv";"w");
  35.  
  36. foreach ($list as $line)
  37. {
  38. fputcsv($file,explode(';',$line));
  39. }
  40.  
  41. fclose($file);
  42. ?>
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


W tablicy robisz echo?

i tu błąd:
  1. $file = fopen("contacts.csv";"w");


Tu masz mniej kombinowany przykład: http://php.net/manual/en/function.fputcsv.php wystarczy, że zmienisz kolejność pól w select.

Ten post edytował trueblue 15.02.2016, 21:38:10
Go to the top of the page
+Quote Post
brzanek
post
Post #7





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Z tego przykładu to już nic nie rozumiem.
Coś mi nie wychodzi.

Poprawiłem trochę kod
  1. <?php
  2. $con=mysql_connect('localhost','login','pass');
  3. mysql_select_db("nazwa_bazy", $con);
  4. mysql_query("SET CHARSET utf8");
  5.  
  6. $query = "
  7. (SELECT CONCAT('Białogard'), tempmax,tempmin,data FROM bialogard ORDER BY id DESC LIMIT 0,1)
  8. UNION
  9. (SELECT CONCAT('Chojna'), tempmax,tempmin,data FROM chojna ORDER BY id DESC LIMIT 0,1)
  10. UNION
  11. (SELECT CONCAT('Darłówek'), tempmax,tempmin,data FROM darlowek ORDER BY id DESC LIMIT 0,1)
  12. UNION
  13. (SELECT CONCAT('Drawsko'), tempmax,tempmin,data FROM drawsko ORDER BY id DESC LIMIT 0,1)
  14. UNION
  15. (SELECT CONCAT('Gryfice'), tempmax,tempmin,data FROM gryfice ORDER BY id DESC LIMIT 0,1)
  16. UNION
  17. (SELECT CONCAT('Gryfino'), tempmax,tempmin,data FROM gryfino ORDER BY id DESC LIMIT 0,1)
  18. UNION
  19. (SELECT CONCAT('Kamień'), tempmax,tempmin,data FROM kamien ORDER BY id DESC LIMIT 0,1)
  20. UNION
  21. (SELECT CONCAT('Kołobrzeg'), tempmax,tempmin,data FROM kolobrzeg ORDER BY id DESC LIMIT 0,1)
  22. UNION
  23. (SELECT CONCAT('Szczecin'), tempmax,tempmin,data FROM szczecin ORDER BY id DESC LIMIT 0,1)
  24. UNION
  25. (SELECT CONCAT('Choszczno'), tempmax,tempmin,data FROM choszczno ORDER BY id DESC LIMIT 0,1)";
  26.  
  27. $result = mysql_query($query) or die(mysql_error());
  28. while($row = mysql_fetch_array($result)){
  29. $list = array
  30. (
  31. "".$row['tempmax'].",".$row['tempmin'].",".$row['0']."",
  32. );
  33. }
  34. $file = fopen("contacts.csv","w");
  35. foreach ($list as $line)
  36. {
  37. fputcsv($file,explode(',',$line));
  38. }
  39. fclose($file);
  40. ?>

Powstaje plik na serwerze csv ale tylko z ostatnim wynikiem czyli z tabeli choszczno. Powinny być pozostałe najnowsze wyniki z innych tabel. Jeszcze jedno jak zamienić ,(przecinek) na ; (średnik) w pliku csv i jak automatycznie zapisywać ten plik nie na serwerze tylko na moim komputerze (oczywiście po wywołaniu pliku z przeglądarki)
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Zmienną $list nadpisujesz za każdym razem w pętli.
http://php.net/manual/en/function.array-push.php (tu są pokazane 2 sposoby zaraz na początku).

http://php.net/manual/en/function.fputcsv.php (opis parametrów funkcji)

http://stackoverflow.com/questions/7263923...wnload-with-php (jak wymusić download)
Go to the top of the page
+Quote Post
brzanek
post
Post #9





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Za dużo tego już nic minie wychodzi. Kombinuję jak tylko mogę ale bez rezultatu. Jak ma ktoś gotowe rozwiązanie to poproszę. Z tej dokumentacji nie wiele mogę wywnioskować bo nie do końca się na tym znam.
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Odnoszę wrażenie, że albo nie czytasz dokładnie, albo nie próbujesz wdrażać zmian.

Dodawanie elementu do tablicy (z przykładów z linku, który podałem):
Kod
$list[]=array(.....);
lub
array_push($list,array(....));


Separator (trzeci parametr), również z linku, który podałem:
Kod
fputcsv(resource $handle , array $fields [, string $delimiter = ","


Ten post edytował trueblue 16.02.2016, 18:05:56
Go to the top of the page
+Quote Post
brzanek
post
Post #11





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Czyli tak?
  1. $list = array
  2. (
  3. $row = array("tempmax", "tempmin", "0");
  4. print_r($row);
  5. );

Takie rozwiązanie chyba nie działa poprawnie.

Czy ktoś jest w stanie mi pomóc?
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: 15.09.2025 - 13:45