Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]Dane z json do bazy danych
brzanek
post 17.10.2016, 19:38:06
Post #1





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

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


Witam chciał bym zapisać dane z pliku json do mojej bazy danych. Problem jest w tym, że dane pod jednym id ok 270 wierszy. Wiem że mogę zrobić to na zasadzie
  1. $add = mysql_query("INSERT INTO nazwa_tabeli
  2. (
  3. miasto, data, tempobecna, text, ikona, code, wiatr, kierunek, cisnienie, opady, zachmurzenie,
  4. dzien, dzientempmax, dzientempmin, dzienodczuwalna, dzienmaxwind, dzienopady, dzienpogoda, dzienikona, dziencode, dzienwschod, dzienzachod,
  5. dzien1, dzien1tempmax, dzien1tempmin, dzien1odczuwalna, dzien1maxwind, dzien1opady, dzien1pogoda, dzien1ikona, dzien1wschod, dzien1zachod
  6. )
  7. VALUES(
  8. '$miasto', '$data', '$tempobecna', '$text', '$ikona', '$code', '$wiatr', '$kierunek', '$cisnienie', '$opady', '$zachmurzenie',
  9. '$dzien', '$dzientempmax', '$dzientempmin', '$dzienodczuwalna', '$dzienmaxwind', '$dzienopady', '$dzienpogoda', '$dzienikona', '$dziencode', '$dzienwschod', '$dzienzachod',
  10. '$dzien1', '$dzien1tempmax', '$dzien1tempmin', '$dzien1odczuwalna', '$dzien1maxwind', '$dzien1opady', '$dzien1pogoda', '$dzien1ikona', '$dzien1wschod', '$dzien1zachod'
  11. )");

Ale boję się, że serwer może nie wytrzymać.
Mam już zrobioną bazę danych i chcę zabrać się za kod który doda mi te dane.
Czy macie jakieś inne wyjście jak to w prosty sposób zapisać.
Tak wygląda plik json.
http://brzanek.webd.pl/prognoza/new/choszcznonew.json
Dane zmieniają się co 30 minut a więc wywołanie pliku który będzie zapisywał te dane do bazy danych MySQL będę chciał wykorzystać CRONA na serwerze.
Go to the top of the page
+Quote Post
Tomplus
post 17.10.2016, 19:45:55
Post #2





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


używając MySQLi możesz wykonać jednym zapytaniem do bazy kilka/naście/set/milionów rekordów INSERT jednocześnie.

A mówiąc szczerze, 270rekordów to drobiazg, problemem byłby gdybyś 100 i więcej razy tyle miał dodawać produktów.
Go to the top of the page
+Quote Post
brzanek
post 19.10.2016, 10:46:19
Post #3





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

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


Nie wiem czy mnie zrozumiałeś.
Jedno id to wszystkie dane z pliku json
Kolejne id zapisywane cyklicznie co 30 minut (CRON) również ze wszystkimi danymi z json który podałem w pierwszym poście.
Chodzi mi o to czy jest jakaś skrócona funkcja która da możliwość zapisania wszystkich danych z pliku json czy muszę robić to na takiej zasadzie jak podałem w pierwszym poście.

Ten post edytował brzanek 19.10.2016, 10:47:36
Go to the top of the page
+Quote Post
b4rt3kk
post 19.10.2016, 13:59:43
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Masz fatalnie zaprojektowaną bazę danych, jeśli faktycznie wszystkie te dane json to jeden wiersz tabeli. Przez to wydłuża się czas dostępu do potrzebnego wiersza.

Zauważ, że większość tych kolumn się powtarza.

Te dane które się powtarzają dla wszystkich godzin (o ile dobrze interpretuje te dane) zapisuj w jedej tabeli jako jeden wiersz, natomiast dane godzinne w osobnej tabeli, jako osobne wiersze.

Przykładowo masz dwie tabelki:

Kod
pogoda:
id (pkey),
dzien,
miejscowosc


oraz:

Kod
pogoda_godzinowo:
id (pkey)
id_pogoda (fkey z tabeli pogoda),
temperatura


1. Do tabeli pogoda wstawiamy wiersz o id = 40.
2. Do tabeli pogoda_godzinowo wstawiamy 24 wiersze, kazdy o id_pogoda = 40, reszta danych na podstawie json.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
brzanek
post 19.10.2016, 14:05:08
Post #5





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

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


Z pewnością masz rację ale nie wiem jak to zapisać w pliku php.
W pliku json znajduje się prognoza godzinowa a na dole prognoza na 7 dni.
W bazie danych miało by to zapisywać się w dwóch innych tabelach? Czyli dwa zapytania na raz - czy dobrze zrozumiałem?
Go to the top of the page
+Quote Post
b4rt3kk
post 19.10.2016, 14:19:13
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(brzanek @ 19.10.2016, 15:05:08 ) *
Z pewnością masz rację ale nie wiem jak to zapisać w pliku php.
W pliku json znajduje się prognoza godzinowa a na dole prognoza na 7 dni.
W bazie danych miało by to zapisywać się w dwóch innych tabelach? Czyli dwa zapytania na raz - czy dobrze zrozumiałem?


Możesz te dane z linku, który podałeś w pierwszym wierszu przedstawić w bardziej czytelny sposób? Tzn. odkoduj tego jsona i wyświetl pomiędzy znacznikami HTML <pre>...</pre>, ułatwi to interpretację.

Dokładnie tak. Proponowałbym w ten sposób (oczywiście to tylko pseudokod):

  1. while ($wiersz !== false) {
  2. // zapis danych ogólnych dla dnia
  3. while ($wiersz_godzinowy !== false) {
  4. // zapis danych szczegółowych dla godzin
  5. }
  6. }


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Tomplus
post 19.10.2016, 14:19:21
Post #7





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


stwórz sobie pętle która będzie dodawać elementy do zapytania.

  1. foreach ($json as $key => $val) {
  2. $sql['insert'] .= "`".$key."` , ";
  3. $sql['values'] .= "'".$val.", ";
  4. }
  5. $add = mysql_query("INSERT INTO nazwa_tabeli ( ".$sql['insert']." ) VALUES( ".$sql['value'].");


Oczywiście to zapytanie nie jest w pełni poprawne, bo wywali błąd MySQL, bo wartości wstrzykiwane mają na końcu przecinek i albo należy dodać kolejną kolumnę np. create_date [i value=> NOW() ] z aktualnym czasem dodania rekordu, albo przerobić kod, aby ostatni przecinek nie był dodawany.
Go to the top of the page
+Quote Post
brzanek
post 19.10.2016, 16:36:28
Post #8





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

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


Cytat(b4rt3kk @ 19.10.2016, 15:19:13 ) *
Możesz te dane z linku, który podałeś w pierwszym wierszu przedstawić w bardziej czytelny sposób? Tzn. odkoduj tego jsona i wyświetl pomiędzy znacznikami HTML <pre>...</pre>, ułatwi to interpretację.

Dokładnie tak. Proponowałbym w ten sposób (oczywiście to tylko pseudokod):

  1. while ($wiersz !== false) {
  2. // zapis danych ogólnych dla dnia
  3. while ($wiersz_godzinowy !== false) {
  4. // zapis danych szczegółowych dla godzin
  5. }
  6. }

Nie bardzo wiem jak zapisać te dane w innej formie. Kombinuję coś ze znacznikami <pre></pre> ale nic nie wychodzi.

Tomplus nie bardzo rozumiem.
Go to the top of the page
+Quote Post
Tomplus
post 19.10.2016, 20:29:07
Post #9





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


<pre> służy tylko do interpretacji danych w sposób przejrzysty. np. jeżeli chcesz wyświetlić tablicę z print_r(). Więc możesz wyświetlić sobie cały json np. przez kod:

  1. echo "<pre>".print_r(json_decode($json_file))."</pre>";


Następnie najlepiej dodawać rekordy do bazy zgodnie z tym układem.
1. wartości najwyższego rzędu do jednej tablicy
2. wartości niższego rzędu do innej tablicy ale z kluczem wiążącym z tablicą wcześniejszą.

A do wyświetlania także wystarczy jedno zapytanie:
Kod
SELECT * FROM tablicaA INNER JOIN tablicaB ON tablicaA.id = tablicaB.idTablicyA WHERE [i tutaj warunki.]



Potem konstruujesz odpowiednie inserty aby dodawać te dane do tablicy. Ogólnie rzecz mówiąc, tak jak napisał Ci bartek.

Go to the top of the page
+Quote Post
brzanek
post 20.10.2016, 09:32:16
Post #10





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

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


Zacząłem coś pisać ale zatrzymałem się na pobieraniu i zapisaniu danych do bazy z prognozami godzinowymi.
Obecne warunki jakie są na początku pliku json działają tak jak powinny ale co dalej.
Tak wygląda kod.
  1. <?php
  2. $json = 'http://brzanek.webd.pl/prognoza/new/choszcznonew.json';
  3. $json = file_get_contents($json);
  4. $response = json_decode($json, true);
  5.  
  6. if ($response != null) {
  7. $latitude = $response['latitude'];
  8. $longitude = $response['longitude'];
  9. //Current Conditions
  10. $time = $response['currently']['time'];
  11. $summary = $response['currently']['summary'];
  12. $icon = $response['currently']['icon'];
  13. $precipIntensity = $response['currently']['precipIntensity'];
  14. $precipProbability = ($response['currently']['precipProbability'])*100;
  15. $precipType = $response['currently']['precipType'];
  16. $temperature = $response['currently']['temperature'];
  17. $apparentTemperature = $response['currently']['apparentTemperature'];
  18. $dewPoint = $response['currently']['dewPoint'];
  19. $humidity = ($response['currently']['humidity'])*100;
  20. $windSpeed = $response['currently']['windSpeed'];
  21. $windBearing = $response['currently']['windBearing'];
  22. $cloudCover = ($response['currently']['cloudCover'])*100;
  23. $pressure = $response['currently']['pressure'];
  24. //Hourly Forecast
  25. $hourlySumamry = $response['hourly']['summary'];
  26. $hourlyIcon = $response['hourly']['icon'];
  27. $hourlyCond= array();
  28. foreach ($response['hourly']['data'] as $td) {
  29. $hourlyCond[] = $td;
  30. }
  31.  
  32. include ("db.php");
  33. $add = mysql_query("INSERT INTO choszczno
  34. (latitude, longitude, time, summary, icon, precipIntensity, precipProbability, temperature, apparentTemperature,
  35. dewPoint, humidity, windSpeed, windBearing, cloudCover, pressure, time1, summary1, icon1, precipIntensity1,
  36. precipProbability1, temperature1, apparentTemperature1, dewPoint1, humidity1, windSpeed1, windBearing1,
  37. cloudCover1, pressure1, time2, summary2, icon2, precipIntensity2, precipProbability2, temperature2,
  38. apparentTemperature2, dewPoint2, humidity2, windSpeed2, windBearing2, cloudCover2, pressure2, time3,
  39. summary3, icon3, precipIntensity3, precipProbability3, temperature3, apparentTemperature3, dewPoint3,
  40. humidity3, windSpeed3, windBearing3, cloudCover3, pressure3, time4, summary4, icon4, precipIntensity4,
  41. precipProbability4, temperature4, apparentTemperature4, dewPoint4, humidity4, windSpeed4, windBearing4,
  42. cloudCover4, pressure4, time5, summary5, icon5, precipIntensity5, precipProbability5, temperature5,
  43. apparentTemperature5, dewPoint5, humidity5, windSpeed5, windBearing5, cloudCover5, pressure5, time6,
  44. summary6, icon6, precipIntensity6, precipProbability6, temperature6, apparentTemperature6, dewPoint6,
  45. humidity6, windSpeed6, windBearing6, cloudCover6, pressure6, time7, summary7, icon7, precipIntensity7,
  46. precipProbability7, temperature7, apparentTemperature7, dewPoint7, humidity7, windSpeed7, windBearing7,
  47. cloudCover7, pressure7, time8, summary8, icon8, precipIntensity8, precipProbability8, temperature8,
  48. apparentTemperature8, dewPoint8, humidity8, windSpeed8, windBearing8, cloudCover8, pressure8, time9,
  49. summary9, icon9, precipIntensity9, precipProbability9, temperature9, apparentTemperature9, dewPoint9,
  50. humidity9, windSpeed9, windBearing9, cloudCover9, pressure9, time10, summary10, icon10, sunriseTime10,
  51. sunsetTime10, moonPhase10, precipIntensity10, precipIntensityMax10, precipProbability10, temperatureMin10,
  52. temperatureMax10, apparentTemperatureMin10, apparentTemperatureMax10, dewPoint10, humidity10, windSpeed10,
  53. windBearing10, cloudCover10, pressure10, time11, summary11, icon11, sunriseTime11, sunsetTime11, moonPhase11,
  54. precipIntensity11, precipIntensityMax11, precipProbability11, temperatureMin11, temperatureMax11,
  55. apparentTemperatureMin11, apparentTemperatureMax11, dewPoint11, humidity11, windSpeed11, windBearing11,
  56. cloudCover11, pressure11, time12, summary12, icon12, sunriseTime12, sunsetTime12, moonPhase12,
  57. precipIntensity12, precipIntensityMax12, precipProbability12, temperatureMin12, temperatureMax12,
  58. apparentTemperatureMin12, apparentTemperatureMax12, dewPoint12, humidity12, windSpeed12, windBearing12,
  59. cloudCover12, pressure12, time13, summary13, icon13, sunriseTime13, sunsetTime13, moonPhase13,
  60. precipIntensity13, precipIntensityMax13, precipProbability13, temperatureMin13, temperatureMax13,
  61. apparentTemperatureMin13, apparentTemperatureMax13, dewPoint13, humidity13, windSpeed13, windBearing13,
  62. cloudCover13, pressure13, time14, summary14, icon14, sunriseTime14, sunsetTime14, moonPhase14,
  63. precipIntensity14, precipIntensityMax14, precipProbability14, temperatureMin14, temperatureMax14,
  64. apparentTemperatureMin14, apparentTemperatureMax14, dewPoint14, humidity14, windSpeed14, windBearing14,
  65. cloudCover14, pressure14)
  66. VALUES(
  67. '$latitude', '$longitude', '$time', '$summary', '$icon', '$precipIntensity', '$precipProbability', '$temperature',
  68. '$apparentTemperature', '$dewPoint', '$humidity', '$windSpeed', '$windBearing', '$cloudCover', '$pressure',
  69. '$time1', '$summary1', '$icon1', '$precipIntensity1', '$precipProbability1', '$temperature1', '$apparentTemperature1',
  70. '$dewPoint1', '$humidity1', '$windSpeed1', '$windBearing1', '$cloudCover1', '$pressure1', '$time2', '$summary2',
  71. '$icon2', '$precipIntensity2', '$precipProbability2', '$temperature2', '$apparentTemperature2', '$dewPoint2',
  72. '$humidity2', '$windSpeed2', '$windBearing2', '$cloudCover2', '$pressure2', '$time3', '$summary3', '$icon3',
  73. '$precipIntensity3', '$precipProbability3', '$temperature3', '$apparentTemperature3', '$dewPoint3', '$humidity3',
  74. '$windSpeed3', '$windBearing3', '$cloudCover3', '$pressure3', '$time4', '$summary4', '$icon4', '$precipIntensity4',
  75. '$precipProbability4', '$temperature4', '$apparentTemperature4', '$dewPoint4', '$humidity4', '$windSpeed4',
  76. '$windBearing4', '$cloudCover4', '$pressure4', '$time5', '$summary5', '$icon5', '$precipIntensity5', '$precipProbability5',
  77. '$temperature5', '$apparentTemperature5', '$dewPoint5', '$humidity5', '$windSpeed5', '$windBearing5', '$cloudCover5',
  78. '$pressure5', '$time6', '$summary6', '$icon6', '$precipIntensity6', '$precipProbability6', '$temperature6',
  79. '$apparentTemperature6', '$dewPoint6', '$humidity6', '$windSpeed6', '$windBearing6', '$cloudCover6', '$pressure6',
  80. '$time7', '$summary7', '$icon7', '$precipIntensity7', '$precipProbability7', '$temperature7', '$apparentTemperature7',
  81. '$dewPoint7', '$humidity7', '$windSpeed7', '$windBearing7', '$cloudCover7', '$pressure7', '$time8', '$summary8', '$icon8',
  82. '$precipIntensity8', '$precipProbability8', '$temperature8', '$apparentTemperature8', '$dewPoint8', '$humidity8',
  83. '$windSpeed8', '$windBearing8', '$cloudCover8', '$pressure8', '$time9', '$summary9', '$icon9', '$precipIntensity9',
  84. '$precipProbability9', '$temperature9', '$apparentTemperature9', '$dewPoint9', '$humidity9', '$windSpeed9', '$windBearing9',
  85. '$cloudCover9', '$pressure9', '$summarya', '$time10', '$summary10', '$icon10', '$sunriseTime10', '$sunsetTime10',
  86. '$moonPhase10', '$precipIntensity10', '$precipIntensityMax10', '$precipProbability10', '$temperatureMin10',
  87. '$temperatureMax10', '$apparentTemperatureMin10', '$apparentTemperatureMax10', '$dewPoint10', '$humidity10',
  88. '$windSpeed10', '$windBearing10', '$cloudCover10', '$pressure10', '$time11', '$summary11', '$icon11', '$sunriseTime11',
  89. '$sunsetTime11', '$moonPhase11', '$precipIntensity11', '$precipIntensityMax11', '$precipProbability11', '$temperatureMin11',
  90. '$temperatureMax11', '$apparentTemperatureMin11', '$apparentTemperatureMax11', '$dewPoint11', '$humidity11', '$windSpeed11',
  91. '$windBearing11', '$cloudCover11', '$pressure11', '$time12', '$summary12', '$icon12', '$sunriseTime12', '$sunsetTime12',
  92. '$moonPhase12', '$precipIntensity12', '$precipIntensityMax12', '$precipProbability12', '$temperatureMin12',
  93. '$temperatureMax12', '$apparentTemperatureMin12', '$apparentTemperatureMax12', '$dewPoint12', '$humidity12',
  94. '$windSpeed12', '$windBearing12', '$cloudCover12', '$pressure12', '$time13', '$summary13', '$icon13', '$sunriseTime13',
  95. '$sunsetTime13', '$moonPhase13', '$precipIntensity13', '$precipIntensityMax13', '$precipProbability13', '$temperatureMin13',
  96. '$temperatureMax13', '$apparentTemperatureMin13', '$apparentTemperatureMax13', '$dewPoint13', '$humidity13', '$windSpeed13',
  97. '$windBearing13', '$cloudCover13', '$pressure13', '$time14', '$summary14', '$icon14', '$sunriseTime14', '$sunsetTime14',
  98. '$moonPhase14', '$precipIntensity14', '$precipIntensityMax14', '$precipProbability14', '$temperatureMin14',
  99. '$temperatureMax14', '$apparentTemperatureMin14', '$apparentTemperatureMax14', '$dewPoint14', '$humidity14',
  100. '$windSpeed14', '$windBearing14', '$cloudCover14', '$pressure14')");
  101. }
  102. ?>


Ten kod pobiera dane godzinowe ale teraz jak to zapisać do bazy do odpowiednich tabel w jednym rekordzie.
  1. //Hourly Forecast
  2. $hourlySumamry = $response['hourly']['summary'];
  3. $hourlyIcon = $response['hourly']['icon'];
  4. $hourlyCond= array();
  5. foreach ($response['hourly']['data'] as $td) {
  6. $hourlyCond[] = $td;
  7. }
Go to the top of the page
+Quote Post
Tomplus
post 20.10.2016, 10:28:44
Post #11





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Powiedz mi proszę po co robisz kolumny o nazwie:

nameX gdzie X to wartość od 1-13?

Nie lepiej aby ten X był osobną kolumną?

zrób sobie tak: [przykład tabel i ich kolumn]

table_hours_weather {
id, latitude, longitude, time, summary, icon, precipIntensity, precipProbability, temperature, apparentTemperature,
dewPoint, humidity, windSpeed, windBearing, cloudCover, pressure
}

table_position_weather {
id, idHours, idPosition, time, summary, icon, sunriseTime, sunsetTime, moonPhase,
precipIntensity, precipIntensityMax, precipProbability, temperatureMin, temperatureMax,
apparentTemperatureMin, apparentTemperatureMax, dewPoint, humidity, windSpeed, windBearing,
cloudCover, pressure
}

id - to unikatowe indeksy dla tabel z opcją AUTO INCRAMENT, element sam się generuje, a odczytujesz przez funkcję insert_id()
idHours to id z tabeli hours_weather
idPosition to kolejne elementy pobrane z Json 1-14 i więcej.

aby sprawnie wpisywać wartości do bazy, zamiast milionów linii kodu, stosuj pętle np. foreach()


Zapytanie końcowe będzie coś w stylu:

Kod
SELECT * FROM table_hours_weather AS w
INNER JOIN table_position_weather AS p
WHERE FROM_UNIXTIME(w.time, '%Y %D %M') = '".$aktualnaData."' ORDER BY p.idPosition ASC;


Zapytanie wywali ci wszystko co jest z tabeli pogoda godzinowa i pogoda pozycja.

Więcej na temat dat znajdziesz tutaj: http://dev.mysql.com/doc/refman/5.5/en/dat...n_from-unixtime
Go to the top of the page
+Quote Post
brzanek
post 20.10.2016, 10:48:21
Post #12





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

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


Wszystko ładnie i pięknie ale będę zbierał dane dla kilku miejscowości, które będą miały identyczne tabele i kolumny.
Potem jak je przedstawić np. na mapie musiałbym kilka razy naraz łączyć się z odpowiednią bazą danych i pobierać je - chyba, że inaczej można.
Zobaczę może uda mi się to zrobić tak jak piszesz ale już widzę, że będę miał trudności z pętlą i zapisem tych danych z pliku json.
Go to the top of the page
+Quote Post
Tomplus
post 20.10.2016, 11:35:18
Post #13





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


dodaj do tablicy: table_hours_weather kolumnę miejscowość gdzie wartość jest albo stringiem albo liczbą.

Jeżeli string to nazwa miejscowości, jeżeli liczba to id miejscowości.

wtedy mozesz rozszerzyć swoją bazę o kolejną tablicę: np. table_towns gdzie

table_towns {
id, name, name_url, region, powiat, gmina, latitude, longitude
}
Oczywiście wartości do tablicy miejscowości są dodawane jednorazowo, a nie przy każdym odświeżeniu. Dzięki temu łatwo możesz w późniejszym czasie stworzyć własną mapę miejscowości bez wczytywaniu setek rekordów z innej tabeli.

Oczywiście do sekcji FROM dodajesz np.
LEFT JOIN table_towns AS t ON w.town = t.id
a do sekcji WHERE
w.town = $townId
lub
t.name_url = $miejscowosc

Go to the top of the page
+Quote Post
b4rt3kk
post 20.10.2016, 20:18:08
Post #14





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(brzanek @ 20.10.2016, 11:48:21 ) *
Wszystko ładnie i pięknie ale będę zbierał dane dla kilku miejscowości, które będą miały identyczne tabele i kolumny.
Potem jak je przedstawić np. na mapie musiałbym kilka razy naraz łączyć się z odpowiednią bazą danych i pobierać je - chyba, że inaczej można.
Zobaczę może uda mi się to zrobić tak jak piszesz ale już widzę, że będę miał trudności z pętlą i zapisem tych danych z pliku json.


Chyba nie mówisz, że każde miasto ma mieć osobną tabelę? Wyobraź sobie, że własnie tak zrobisz, a tu nagle zachodzi potrzeba dorzucenia kolejnych 10 miast, no i co, kolejnych 10 tabel? To bez sensu.

Wyobraź sobie teraz wyszukiwanie w takiej bazie danych - chcesz pobrać pogodę dla Warszawy, Lublina i Bydgoszczy. W Twoim układzie musisz wykonać 3 zapytania (lub użyć UNION) - co jest kompletnym bezsensem.

Jedna tabela dla miast, jedna dla dni, jedna dla godzin.

Dzięki temu możesz wszystko obsłużyć w miarę eleganckimi zapytaniami, w o wiele krótszym czasie i z lepszym dostępem do poszczególnych danych.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
brzanek
post 22.10.2016, 11:40:56
Post #15





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

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


ok a więc mam takie tabele.
  1. CREATE TABLE IF NOT EXISTS `miasta` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_miasto` varchar(100) NOT NULL,
  4. `latitude` float(10,6) NOT NULL,
  5. `longitude` float(10,6) NOT NULL,
  6. PRIMARY KEY (`id`),
  7. UNIQUE KEY `id` (`id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
  9.  
  10.  
  11. CREATE TABLE IF NOT EXISTS `prognoza_godzinowa` (
  12. `id_miasto` int(6) NOT NULL,
  13. `time` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  14. `summary` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  15. `icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  16. `precipIntensity` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  17. `precipProbability` varchar(10) NOT NULL,
  18. `temperature` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  19. `apparentTemperature` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  20. `dewPoint` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  21. `humidity` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  22. `windSpeed` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  23. `windBearing` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  24. `cloudCover` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  25. `pressure` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
  26. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  27.  
  28.  
  29. CREATE TABLE IF NOT EXISTS `prognoza` (
  30. `id_miasto` int(6) NOT NULL,
  31. `time` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  32. `summary` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  33. `icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  34. `sunriseTime` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  35. `sunsetTime` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  36. `moonPhase` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  37. `precipIntensity` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  38. `precipIntensityMax` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  39. `precipProbability` varchar(10) NOT NULL,
  40. `temperatureMin` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  41. `temperatureMax` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  42. `apparentTemperatureMin` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  43. `apparentTemperatureMax` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  44. `dewPoint` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  45. `humidity` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  46. `windSpeed` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  47. `windBearing` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  48. `cloudCover` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  49. `pressure` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
  50. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Co teraz?

Ten post edytował brzanek 22.10.2016, 11:56:02
Go to the top of the page
+Quote Post
Tomplus
post 22.10.2016, 13:06:27
Post #16





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


- wszystkie kolumny jako utf-8, a tabela jako latin. Popraw.

- dlaczego wszystko dałeś jako VARCHAR?
- czas to liczba więc albo INT
- liczby z dwoma lub więcej miejscami po przecinku to FLOAT

Go to the top of the page
+Quote Post
brzanek
post 22.10.2016, 20:13:39
Post #17





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

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


Racja poprawiłem
  1. CREATE TABLE IF NOT EXISTS `miasta` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_miasto` varchar(100) NOT NULL,
  4. `latitude` float(10,6) NOT NULL,
  5. `longitude` float(10,6) NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  8.  
  9.  
  10. CREATE TABLE IF NOT EXISTS `prognoza_godzinowa` (
  11. `id_miasto` int(11) NOT NULL,
  12. `time` int(11) NOT NULL,
  13. `summary` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  14. `icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  15. `precipIntensity` float(10,6) NOT NULL,
  16. `precipProbability` float(10,6) NOT NULL,
  17. `temperature` float(10,6) NOT NULL,
  18. `apparentTemperature` float(10,6) NOT NULL,
  19. `dewPoint` float(10,6) NOT NULL,
  20. `humidity` float(10,6) NOT NULL,
  21. `windSpeed` float(10,6) NOT NULL,
  22. `windBearing` float(10,6) NOT NULL,
  23. `cloudCover` float(10,6) NOT NULL,
  24. `pressure` float(10,6) NOT NULL
  25. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  26.  
  27.  
  28. CREATE TABLE IF NOT EXISTS `prognoza` (
  29. `id_miasto` int(11) NOT NULL,
  30. `time` int(11) NOT NULL,
  31. `summary` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  32. `icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  33. `sunriseTime` int(11) NOT NULL,
  34. `sunsetTime` int(11) NOT NULL,
  35. `moonPhase` float(10,6) NOT NULL,
  36. `precipIntensity` float(10,6) NOT NULL,
  37. `precipIntensityMax` float(10,6) NOT NULL,
  38. `precipProbability` float(10,6) NOT NULL,
  39. `temperatureMin` float(10,6) NOT NULL,
  40. `temperatureMax` float(10,6) NOT NULL,
  41. `apparentTemperatureMin` float(10,6) NOT NULL,
  42. `apparentTemperatureMax` float(10,6) NOT NULL,
  43. `dewPoint` float(10,6) NOT NULL,
  44. `humidity` float(10,6) NOT NULL,
  45. `windSpeed` float(10,6) NOT NULL,
  46. `windBearing` float(10,6) NOT NULL,
  47. `cloudCover` float(10,6) NOT NULL,
  48. `pressure` float(10,6) NOT NULL
  49. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Tak wygląda plik który dodaje rekordy do bazy danych.
  1. <?php
  2. $json = 'http://brzanek.webd.pl/prognoza/new/choszcznonew.json';
  3. $json = file_get_contents($json);
  4. $response = json_decode($json, true);
  5.  
  6. if ($response != null) {
  7.  
  8. //Daily Forecast
  9. $dailyCond= array();
  10. foreach ($response['daily']['data'] as $d) {
  11. $dailyCond[] = $d;
  12. }
  13.  
  14. $wi = 0;
  15. $count = 0;
  16. foreach ($dailyCond as $cond) {
  17.  
  18. if ($count++ == 0) continue;
  19.  
  20. $wtime = $cond['time'];
  21. $wsummary = $cond['summary'];
  22. $wicon = $cond['icon'];
  23. $wtemperatureMax = round($cond['temperatureMax']);
  24. $wtemperatureMin = round($cond['temperatureMin']);
  25. $wprecipProbability = $cond['precipProbability']*100;
  26. $wprecipIntensity = $cond['precipIntensity'];
  27. if (isset($cond['precipType'])) {
  28. $precipType = $cond['precipType'];
  29. }
  30. $wcloudCover = $cond['cloudCover']*100;
  31. $whumidity = $cond['humidity']*100;
  32. $wwindSpeed = round($cond['windSpeed']);
  33. $wsunriseTime = $cond['sunriseTime'];
  34. $wsunsetTime = $cond['sunsetTime'];
  35. $wmoonPhase = $cond['moonPhase'];
  36. $wprecipIntensityMax = $cond['precipIntensityMax'];
  37. $wapparentTemperatureMin = $cond['apparentTemperatureMin'];
  38. $wapparentTemperatureMax = $cond['apparentTemperatureMax'];
  39. $wdewPoint = $cond['dewPoint'];
  40. $wwindBearing = $cond['windBearing'];
  41. $wpressure = $cond['pressure'];
  42. $wid_miasto = 1;
  43.  
  44. include ("db.php");
  45. $add = mysql_query("UPDATE prognoza SET time='".$wtime."', summary='".$wsummary."', icon='".$wicon."', sunriseTime='".$wsunriseTime."', sunsetTime='".$wsunsetTime."', moonPhase='".$wmoonPhase."', precipIntensity='".$wprecipIntensity."', precipIntensityMax='".$wprecipIntensityMax."',
  46. precipProbability='".$wprecipProbability."', temperatureMin='".$wtemperatureMin."', temperatureMax='".$wtemperatureMax."', apparentTemperatureMin='".$wapparentTemperatureMin."', apparentTemperatureMax='".$wapparentTemperatureMax."',
  47. dewPoint='".$wdewPoint."', humidity='".$whumidity."', windSpeed='".$wwindSpeed."', windBearing='".$wwindBearing."', cloudCover='".$wcloudCover."', pressure='".$wpressure."'");
  48.  
  49. $wi++;
  50. if ($wi%3 == 0) echo '</div><div class="row">';
  51. }
  52. }
  53. ?>


Problem w tym, że ilość rekordów zgadza się ale każdy z nich jest taki sam - dlaczego?
Proszę o pomoc z góry dziękuję i pozdrawiam.

Ten post edytował brzanek 22.10.2016, 19:04:13
Go to the top of the page
+Quote Post
Tomplus
post 22.10.2016, 22:22:48
Post #18





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


wyświetl sobie poprzez echo treść lub print_r, jeżeli to tablica i sprawdź gdzie leży błąd. Może coś podwójnie nadpisujesz?
Go to the top of the page
+Quote Post
brzanek
post 23.10.2016, 10:15:15
Post #19





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

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


Dziwne polecenie
  1. $add = mysql_query("INSERT INTO prognoza
  2. (wid_miasto, wtime, wsummary, wicon, wsunriseTime, wsunsetTime, wmoonPhase, wprecipIntensity, wprecipIntensityMax, wprecipProbability, wtemperatureMin, wtemperatureMax, wapparentTemperatureMin, wapparentTemperatureMax, wdewPoint, whumidity, wwindSpeed, wwindBearing, wcloudCover, wpressure)
  3. VALUES(
  4. '$wid_miasto', '$wtime', '$wsummary', '$wicon', '$wsunriseTime', '$wsunsetTime', '$wmoonPhase', '$wprecipIntensity', '$wprecipIntensityMax', '$wprecipProbability', '$wtemperatureMin', '$wtemperatureMax', '$wapparentTemperatureMin', '$wapparentTemperatureMax', '$wdewPoint', '$whumidity', '$wwindSpeed', '$wwindBearing', '$wcloudCover', '$wpressure')");

Działa bez problemu ale nie chcę dodawać nowych tabeli tylko aktualizować poprzednie.
Jeśli dam polecenie
  1. $add = mysql_query("UPDATE prognoza SET wtime='".$wtime."', wsummary='".$wsummary."', wicon='".$wicon."', wsunriseTime='".$wsunriseTime."', wsunsetTime='".$wsunsetTime."', wmoonPhase='".$wmoonPhase."', wprecipIntensity='".$wprecipIntensity."', wprecipIntensityMax='".$wprecipIntensityMax."',
  2. wprecipProbability='".$wprecipProbability."', wtemperatureMin='".$wtemperatureMin."', wtemperatureMax='".$wtemperatureMax."', wapparentTemperatureMin='".$wapparentTemperatureMin."', wapparentTemperatureMax='".$wapparentTemperatureMax."',
  3. wdewPoint='".$wdewPoint."', whumidity='".$whumidity."', wwindSpeed='".$wwindSpeed."', wwindBearing='".$wwindBearing."', wcloudCover='".$wcloudCover."', wpressure='".$wpressure."' WHERE wid_miasto='".$wid_miasto."'");

To nadpisuje mi rekordy ale każdy jest taki sam na każdy dzień.
Gdzie jest błąd?
Go to the top of the page
+Quote Post
Tomplus
post 23.10.2016, 11:21:48
Post #20





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


A po co aktualizujesz?
Nie lepiej dodać nowe rekordy? A poprzednie zachować jako archiwum? Co gdy będziesz potrzebował prognozę z dnia poprzedniego, albo roku wcześniej?

Robiąc UPDATE tylko dla ID_miasto to właśnie nadpisujesz kolejne rekordy i...

Mając listę:
literki: [
A
B
C
]

pętla {
UPDATE x SET literki = $LITERKA WHERE id = miasto
}

to wynik takiego zapytania będzie że wszystkie rekordy mające id = miasto będą mieć literkę C.
Więc abyś miał poprawnie, to musisz rozszerzyć zapytanie WHERE od szczegół tj. godzina?


Spójrz na strukturę twojego pliku JSON: http://www.jsoneditoronline.org/?id=7fe5e4...890a08607799c6d

Na najwyższym poziomie masz 3 wartości liczbowe i 1 string.
Pozostałe 4 to obiekty:
- aktualna pogoda
- pogoda na najbliższe 49h
- pogoda na najbliższe 8 dni
- i flagi API

Jeżeli currently to pikuś, to pozostałe zawierają tablicę DATA których klucze są od 0-48 lub 0-7.
I ten klucze są informacją która powinna znaleźć się w bazie.

Wtedy tworząc zapytanie UPDATE

Kod
UPDATE prognoza SET [...] WHERE `wid_miasto` = '{$wid_miasto}' AND `dzien` = {$key};

Dzięki temu będziesz aktualizował tylko i wyłącznie ostatnie rekordy prognozy.



Ten post edytował Tomplus 23.10.2016, 11:22:49
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 6.06.2025 - 17:52