Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP][PHP/SQL] Pomoc z obsługą pogody dla wielu miast
oi.
post 30.01.2011, 12:23:02
Post #1





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Witam, szukam optymalnego rozwiązania dla skryptu pogody dla wszystkich miast powiatowych w Polsce.
Zrobiłem dla 1 województwa kilkanaście plików php o strukturze
pogoda-wroclaw.php , pogoda-walbrzych.php ....
w pliku .htaccess
zamieniam to na html
  1. RewriteRule ^pogoda-wroclaw.html$ pogoda-wroclaw.php [L]


W efekcie na serwerze powstaje mi ok 20 miast x 16 województw do tego plik htaccess rozrasta się w nieskończoność.

Myśle nad wykorzystaniem CASE gdzie w każdym warunku będzie nowe miasto. Czy to optymalne rozwiązanie ? Czy kilkaset warunków case nie będzie zbytnio obciążało serwera -czy lepszym rozwiązaniem będzie stworzenie 16 plików /województw/ a w nich około 20 warunków case ?
Proszę o naprowadzenie mnie na dobry tok myślenia.
Go to the top of the page
+Quote Post
tehaha
post 30.01.2011, 12:58:02
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


kompletnie bez sensu, przecież właśnie o to chodzi, że dzięki php można to obsługiwać jednym plikiem w htaccess robisz sobie np. taką regułę:
  1. RewriteRule ^pogoda/([0-9]*)/([A-Za-z]*).html user_pogoda.php?id=$1&city=$2 [L]

czyli linki będą wyglądały tak: pogoda/2/walbrzych.html

gdzie 2 to będzie id, na podstawie, którego pobierzesz z bazy odpowiednie dane i wyświetlisz

żadne case, żadne setki regułek, pobierasz id z url, wstawiasz do zapytania, pobierasz z bazy pogodę i wyświetlasz
Go to the top of the page
+Quote Post
oi.
post 30.01.2011, 16:23:14
Post #3





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Ja nie mam w bazie danych podziału na miasta, jedynie na województwa, w których są opisy i informacje dotyczące różnych miast. Dlatego tworzę oddzielne pliki php gdzie wyciągam z bazy danych informacje
  1. SELECT * FROM informacje WHERE tresc LIKE '%$miasto%'

oraz z drugiej tabeli
  1. SELECT * FROM opisy WHERE tresc LIKE '%$miasto%'


do tego wklejam zewnętrzny kod pogody dla danego miasta.

Mam w bazie danych informacje niusy o pogodzie w różnych miastach i chcę to rozbić na poszczególne miastach.
Czyli dla adresu domena.pl/pogoda-wroclaw.html wyświetlić te niusy i na głównym miejscu prognozę pogody, którą już mam wygenerowaną dla danego miasta od zewnętrznego usługodawcy.
Z modRewrite sobie poradzę . Chodzi mi o to jak optymalnie wygenerować w jednym pliku dla każdego miasta nowy adres np skrypt.php?pogoda=miasto które za pomocą modrewrite zamienie na pogoda-miasto.html
Go to the top of the page
+Quote Post
tehaha
post 30.01.2011, 17:12:38
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no pobierasz miasto z url, wstawiasz do zapytania i wyświetlasz wynik...co tu jest nie jasne?
Go to the top of the page
+Quote Post
oi.
post 30.01.2011, 17:23:14
Post #5





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Po pierwsze adres user_pogoda.php?id=$1&city=$2 ktos głupotę podstawi np user_pogoda.php?id=$1&blabla=$2 - w zmienna city wstawi "blabla" strona docelowa wyswietli pogoda dla miasta BLABLA ?
Po drugie w języku polski jest odmiana rzeczoniwków:
-Wrocław
-Wrocławia
-Wrocławiu
-Wroclaw /bez polskich znaków/
jak to rozwiązać za pomocą twego rozwiązania? W przypadku rozważanego przeze mnie CASE, w każdym warunku rozważam deklinację:

  1. if (isset($_REQUEST['miasto'])) {
  2. switch ($_REQUEST['miasto']) {
  3.  
  4. case 'wroclaw':
  5.  
  6. $znajdz="wrocław";
  7. $znajdz2="wroclaw";
  8. $znajdz3="wroclawia";
  9. $woj="4";
  10. .
  11. .
  12. .
  13. break;
  14.  
  15. ...
Go to the top of the page
+Quote Post
tehaha
post 30.01.2011, 17:39:52
Post #6





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Cytat
Po pierwsze adres user_pogoda.php?id=$1&city=$2 ktos głupotę podstawi np user_pogoda.php?id=$1&blabla=$2 - w zmienna city wstawi "blabla" strona docelowa wyswietli pogoda dla miasta BLABLA ?
No i co z tego, że podstawi? przecież jak miasto nie zostanie odnalezione w bazie to wyświetlasz jakiś komunikat, że miasto nie znalezione i tyle,

kompletnie nie rozumiem Twojego podejścia, najpierw powinieneś zacząć od odpowiedniego zaprojektowania bazy danych każdy region czy tam miasto powinien mieć swoje ID i do niego przypisane dane odnośnie pogody i np wyświetlasz listę miast i po kliknięciu w jakieś wyświetlana jest pogoda, plus możesz zrobić wyszukiwarkę i wtedy przy pomocy mysql LIKE wyszukujesz id dla wpisanego miasta i pobierasz pogodę przypisaną do ID, uwzględnienie różnych form też nie stanowi problemu ponieważ możesz stworzyć dodatkową kolumnę w tabeli gdzie będzie trzymał te formy i po nich wyszukiwał np.

tabela miasta

id | city | city_keys
1 | Wrocław | Wrocław, wroclaw, wroclawia

tabela pogoda

id | city_id | temp | itp

1 | 1 | 14.5

i wyszukiwać będzie po kolumnie city_keys
Go to the top of the page
+Quote Post
oi.
post 30.01.2011, 17:51:51
Post #7





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


"najpierw powinieneś zacząć od odpowiedniego zaprojektowania bazy danych"
Owszem zgadzam się w 100% ale strona i jej baza SQL już są /wszelkie przeróbki są obecnie niewskazane/
dlatego szukam optymalnego rozwiązania dla mego przypadku
Go to the top of the page
+Quote Post
tehaha
post 30.01.2011, 18:16:51
Post #8





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no to może opisz ten przypadek? Zapamiętaj jedną rzecz: zawsze opisuj problem a nie to co Tobie się wydaje, że jest rozwiązaniem, napisz jaką masz strukturę bazy danych i co już masz i co chcesz osiągnąć, bo jakakolwiek by ta baza nie była to pomysł z kilkudziesięcioma case'ami i plikami jest bez sensu
Go to the top of the page
+Quote Post
oi.
post 30.01.2011, 18:57:41
Post #9





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


W bazie danych mam informacje jakies niusy opisy , które w swojej treści zawierają dane miasta.

  1. SELECT * FROM informacje WHERE tresc LIKE '%$miasto%'

oraz z drugiej tabeli
  1. SELECT * FROM opisy WHERE tresc LIKE '%$miasto%'

tak powstają dane do danego miasta + zewnętrzny include dla danego miasta.

Każdy plik miasta musi generować title i descripte dla danego miasta.

DO TEJ PORY: zrobiłem dla każdego miasta oddzielny plik i w pliku w pliku .htaccess zamiana kazdseg miasta z php na html

SZUKAM prostszego rozwiązania - by nie tworzyć kilkuset plików php oraz reguł w w pliku .htaccess

Może stworzyć nowy katalog w nim dane miasta, np pogoda/wroclaw.php ===> jak tu Mod rewrite zrobic aby otrzymac pogoda-wroclaw.html ?
Go to the top of the page
+Quote Post
tehaha
post 30.01.2011, 19:33:04
Post #10





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no ok to robisz sobie linki:
pogoda-wroclaw.html
pogoda-krakow.html

itd.

ale wszystkie kierowane będą do jednego pliku php

w htaccess dajesz np.:
RewriteRule ^pogoda-([^;]*).html pogoda.php?city=$1 [L]

a w php robisz:
  1. $city = mysql_real_escape_string($_GET['city']);
  2. $query = "SELECT * FROM informacje WHERE tresc LIKE '%$city %' ";

i wyświetlasz pogodę
Go to the top of the page
+Quote Post
oi.
post 2.02.2011, 13:45:39
Post #11





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Tylko, że Twój sposób cały czas nie rozwiązuje problemu z odmianą nazwy miast
-Wrocław
-Wrocławia
-Wrocławiu
-Wroclaw /bez polskich znaków/

Stosując Twój sposób będę miał Pogoda Wroclaw zamiast Pogoda we Wrocławiu

Czy użycie kilkuset CASE jest dopuszczalne ? Plik php będzie bardzo ciężki dla serwera :-/
Go to the top of the page
+Quote Post
wookieb
post 2.02.2011, 13:55:14
Post #12





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Rzecz której Ci potrzeba to Stemming. Czyli zamiany formy odmiany słowa do formy podstawowej. Czyli u Ciebie zamiana słowa "Wrocławiu" na "Wrocław".
Są 2 odmiany stemmerów. Jeden z nich to słownikowy (czyli po prostu "mapa" np "Wrocławia" zamień na "Wrocław") i raczej tym powinieneś się zainteresować (a właściwie napisać).
Co do procesu jak miałoby to działać to
1)
Kod
RewriteRule ^pogoda-([^;]*).html pogoda.php?city=$1 [L]

Jest ok ze względu na uniwersalność.
2) Bazę miast utwórz jako oddzielną tabelę (miasta - id_miasto, nazwa_miasta)
3) Bazę słownikową odmian jak oddzieną tabelę (odmiana_miast - slowo, id_miasta)
4) Tutaj twoja tabela pogody (pogoda)
5) Przy dodawaniu nowego opisu pogody przepuszczasz nazwę miasta przez proces wyszukujący powiązania odmiany w tabeli "odmiana_miasto"
6) Jeżeli nie znajdzie wyniku w tabeli "odmiana_miasto" szukasz wyniku po tabeli "miasta".
7) Jeżeli 5 i 6 nie zwróci wyniku to sorry jest błąd
8) Jeżeli 5 bądź 6 zwróci wynik to masz id_miasta które wstawisz do tabeli "pogoda".
Dzięki temu wiesz po jakim id_miasta szukać.


--------------------
Go to the top of the page
+Quote Post
oi.
post 2.02.2011, 21:05:44
Post #13





Grupa: Zarejestrowani
Postów: 145
Pomógł: 1
Dołączył: 12.07.2006

Ostrzeżenie: (10%)
X----


Dzięki wookieb, Twój tok myślenia jest podobny do Tehaha. Widzę, że muszę stworzyć nową tabelę nie powiązaną z żadną inna tablą typu |informacje| czy |opisy|

Struktura:
id_miasta | id_wojewodztwa | miasto | miasto_pl | odmiana|
gdzie id miasta to klucz podstawowy autoinkrement, id_województwa by posegregować miasta na obszary Polski, MIASTO to nazwa miasta dla pogoda.php?city=$1 ; MIASTO_PL to nazwa miasta z polskimi znakami WrocŁaw, ODMIANA to odmiana do wykorzystania we Wrocławiu - dzięki temu nie będzie potrzebne użycie Stemming

np
1 | 1 | wroclaw | Wrocław | we Wrocławiu |
2 | 8 | warszawa | Warszawa | w Warszawie |

Wystarczy że uzupełnię żmudnie tabelę w kilkaset miast i chyba to będzie najlepsze rozwiązanie?

Kolejno będę otrzymywał miasta pogoda.php?city=wroclaw które zamienię na pogoda-wroclaw.html :-)
Co o tym myślicie

Dziękuję za pomoc z tą dodatkową tabelą miasta. Wszystko działa OK :-)
Go to the top of the page
+Quote Post
wookieb
post 2.02.2011, 22:26:22
Post #14





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Sądże, że i tak będzie potrzebne ale skoro Ci to odpowiada to OK.


--------------------
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: 3.05.2025 - 04:56