![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 945 Pomógł: 7 Dołączył: 15.03.2005 Skąd: katowice Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam bazę 30 tys rekordów, każdy rekord ma dane geograficzne (szerokość i długość - dziesiętną) jak zrobić zapytanie które pokaże listę posortowanych rekordów według dystansu. Czyli najpierw obliczamy dystans dla każdego rekordu na podstawie danych lokalizacyjnych. potem sortujemy. żeby zobrazować. mam listę kin w Polsce użytkownik normalnie ogląda listę posortowaną według daty dodana. Ale jak w swoich ustawieniach konta poda swoje dane geograficzne to na ich podstawie będzie mógł zobaczyć co jest najbliżej jego lokalizacji. na razie wyklułem coś takiego:
MUSI BYC TO ZAPYTANIE BEZ INGERENCJI PHP. Ten post edytował acztery 12.09.2011, 14:19:35
Powód edycji: [wookieb]:
|
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Po konsultacji otwieram - źle opisany post
Pomijam fakt, że twoje zapytanie jest niesamowicie niewydajne i lepiej ograniczyć zakres wyszukiwanych rekordów do pewnego obszaru, np 100 / 30 km od danego punktu
Powód edycji: [wookieb]: [wookieb]:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 945 Pomógł: 7 Dołączył: 15.03.2005 Skąd: katowice Ostrzeżenie: (0%) ![]() ![]() |
tak jest.. chodzi o to ze zmienna distance jest zła wartość - tam mam jakieś duże liczny.. Ograniczać nie mogę... na bazie 30 tys rekordów narazie zapytanie wykonuję sie mniej niż sek. wiec to nie problem.
aha żeby ograniczyć zakres i tak muszę wyliczyć dystans dla wszystkich wiec Twoja rada na temat jest bez sensu:) Ten post edytował acztery 12.09.2011, 14:25:35 |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Nie musisz. Możesz wyliczyć w jakim obszarzę będą się znajdowały punkty (no niestety po stronie php albo w mysql też da radę) i dodać zakres przeszukiwań w WHERE. Nie wiem dlaczego masz takie dziwne wartości, dawno się tym nie bawiłem.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 945 Pomógł: 7 Dołączył: 15.03.2005 Skąd: katowice Ostrzeżenie: (0%) ![]() ![]() |
tak jest.. chodzi o to ze zmienna distance jest zła wartość - tam mam jakieś duże liczny.. Ograniczać nie mogę... na bazie 30 tys rekordów narazie zapytanie wykonuję sie mniej niż sek. wiec to nie problem. aha żeby ograniczyć zakres i tak muszę wyliczyć dystans dla wszystkich wiec Twoja rada na temat jest bez sensu:) w php mam ładny skrypt.
i ładnie działa, to samo trzeba zrobić w SQL. zrobiłbym to też na php ale tu paginacja inaczej wygląda po jak sortujemy w w SQL to paginacja za pomocą LIMIT , a jak za pomocą php miałbym obliczać to pobieram wszystko to tablicy potem tem skryptem wyliczam. potem sortuje nową tablice i sortuje już inaczej.. a nie mam czasu na takie działania teraz. |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Uhm, a nie możesz tego zrobić najprościej, jak się da? Tzn. przez długość wektora pomiędzy punktami?
|
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Yyy to obliczanie uwzględnia bodajże nawet kulistość ziemi, ale głowy nie daję.
|
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
No tak, tylko że na tak małej powierzchni można IMO sobie spokojnie to darować. [;
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 945 Pomógł: 7 Dołączył: 15.03.2005 Skąd: katowice Ostrzeżenie: (0%) ![]() ![]() |
erix mogę ale wtedy mogą być przekłamania w wynikach. czyli jak mam np 3 kina obok siebie to te wyniki mogą być złe. Po za tym błędna różnica w odległości bedzie rosnąć wraz z odległością od punktu a do punktu B. Jak zrobie to pokażę.
Ps to co pokazałem uwzględnia to że ziemia jest okrągła.... (prawie okrągła bo koło to to nie jest ale to tak na marginesie) Procedura ładnie działa.
Ten post edytował acztery 12.09.2011, 17:51:07 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
( 6371 * acos( cos( radians({$dane['google_lat']}) ) * cos( radians(ob.google_lat ) ) * cos( radians(ob.google_lng ) - radians({$dane['google_lng']}) ) + sin( radians({$dane['google_lat']}) ) * sin( radians(ob.google_lat ) ) ) ) AS distance,
ja uzywam takiego czegos i liczy idealnie. W $dane['google_xxx'] podstawiasz od jakiego pkt ma szukac i w distance masz odleglosc jaka dzieli punkt z tym co masz w bazie |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 19:12 |