Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie w promieniu
crew123
post
Post #1





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

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


Witam.
Mam bazę z miejsc, w której mam dane dot. położenia geograficznego względem google maps i teraz mam do Was pytanie, jakim sposobem robilibyście wyszukiwanie tych wszystkich miejsc wpisując kod pocztowy i np: szukaj w promieniu 25km? Jakby ktoś znał dobry sposób na to byłbym bardzo wdzięczny (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pawel_W
post
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


policz odległość punktu A od punktu B i sprawdź czy jest < 25 (wzór na liczenie odległości na mapie znajdziesz w internecie)
Go to the top of the page
+Quote Post
maly_swd
post
Post #3





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


W $dane[....] podajesz punkt od ktorego ma szukac.

  1. SELECT
  2. ( 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
  3.  
  4. FROM TABELA ob
  5. GROUP BY ob.miejscowosc
  6. HAVING distance<25
  7.  
  8. ORDER BY distance


Ten post edytował maly_swd 1.11.2012, 15:01:42
Go to the top of the page
+Quote Post
crew123
post
Post #4





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

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


o co chodzi z tym ob?
ogólnie mam problem z zapytaniem, wyciągam odległość tym kodem:
  1. $dystans = round (rad2deg(acos(sin(deg2rad($szgeo1)) * sin(deg2rad($szgeo2)) + cos(deg2rad($szgeo1)) * cos(deg2rad($szgeo2)) * cos(deg2rad($dlgeo1 - $dlgeo2)))) * 111.18957696);

Ale potem nie wiem jak skonstruować zapytanie wyświetlające wyniki, ponieważ w bazie nie mam zawartego dystansu, próbowałem jakoś dystans zapisać jako kolumne ale wywyalało błąd.

Ten post edytował crew123 1.11.2012, 16:40:37
Go to the top of the page
+Quote Post
CuteOne
post
Post #5





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Jest to nazwa kolumny z aliasem tabeli innymi słowy TABELA.KOLUMNA z tego co pamiętam "_lat" oznacza latitude (google -> google map latitude)
Go to the top of the page
+Quote Post
crew123
post
Post #6





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

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


Niestety kod, który napisał mały wyświetla błąd fetch_array
Go to the top of the page
+Quote Post
maly_swd
post
Post #7





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


1. Jak nazywa sie tabela w ktorej trzymasz dane
2. jak nazywaja sie kolumny w ktorych trzymasz dane

Jak to podasz to bedzie wiadomo co jest nie tak u Ciebie.

Podalem CI ogolnego SQL ktory wybiera z bazy wszystko co spelnia warunek z dystansem (wartosc dystans mysql oblicza sam, nie trzba go miec)
Go to the top of the page
+Quote Post
crew123
post
Post #8





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

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


Tabelka, w której trzymam kody i ich położenie geograficzne, miejscowość kodu (lat, lng): kody_new .
Tabelka, w której trzymam dane potrzebne do ogłoszenia oraz położenie geograficzne autora ogłoszenia (lat, lng): ogloszenia .
kody_new:
(IMG:http://crew.xaa.pl/skrypt/kody.png)

ogloszenia:
(IMG:http://crew.xaa.pl/skrypt/ogloszenia.png)
Go to the top of the page
+Quote Post
maly_swd
post
Post #9





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


  1. SELECT
  2. ( 6371 * acos( cos( radians({$dane['google_lat']}) ) * cos( radians(o.lat ) ) * cos( radians(o.lng ) - radians({$dane['google_lng']}) ) + sin( radians({$dane['google_lat']}) ) * sin( radians(o.lat ) ) ) ) AS distance
  3.  
  4. FROM ogloszenia o
  5. GROUP BY o.id
  6. HAVING distance<25
  7.  
  8. ORDER BY distance


jak podstawisz pod $dane[...] odpowiednie lat i lng z jakiegos miasta to poda Ci wszystkie oglaszenia, ktore spelniaja warunek 25km od tego co podales w $dane[..]
Go to the top of the page
+Quote Post
crew123
post
Post #10





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

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


Moglbys mi powiedziec jeszcze dlaczego przy przejsciu na 2gą strone wyszukiwania (1,2...4,5) wyskakuje fetch_array lub bez podania promienia czy kodu?

Ten post edytował crew123 1.11.2012, 21:00:45
Go to the top of the page
+Quote Post
maly_swd
post
Post #11





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


ze co?
Pewnie masz blad w zapytaniu... nie podstawiasz danych lub cos w ten desen.

Wyswietl sobie echo mysql_error();
Go to the top of the page
+Quote Post
crew123
post
Post #12





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

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


Jak dla mnie wszystko jest ok, zamieszcę tutaj plik na którym pracuje:
  1. <?
  2. include ('../include/config.php');
  3. db_connect();
  4. $ustawienia=mysql_fetch_array(mysql_query("SELECT * FROM config"));
  5. ?>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  8. <head>
  9. <title>Wyszukiwarka - <?php echo $ustawienia['tytul']; ?></title>
  10. <?php include('../theme/head.php') ?>
  11. </head>
  12. <body>
  13. <div id="content">
  14. <?php
  15. // pobieramy dane usera
  16. $user_data = get_user_data();
  17.  
  18. <div id="header">
  19. <div id="hdr_lewa">
  20. <div class="logo"></div>
  21. </div>
  22. <div id="hdr_prawa">';
  23. include('../theme/login.php');
  24. echo '
  25. </div>
  26. </div>';
  27. include('../theme/menu.php');
  28. <div id="wrapper">
  29. <table cellpadding="0" cellspacing="0" width="1002">
  30. <tr>
  31. <td valign="top" width="234" style="background:#f6f6f6;">';
  32. include('../theme/lewa.php');
  33. echo '</td><td valign="top" width="534">';
  34. echo '<div class="naglowek">Wyszukiwarka</div>';
  35. include('pagination.php');
  36. $limit = $ustawienia['ogloszen_na_strone']; // Ilość pozycji na stronę...
  37. $pg = $_GET['page']; // Pobranie do zmiennej numeru strony...
  38. if(!isset($pg)) {
  39. $l1 = 0;
  40. $l2 = $limit; //Jeśli zmienna $pg ma pustą zawartość nastawiamy granice od 0 do wartości $limit
  41. } else {
  42. $l1 = $limit * $pg - $limit; //W przeciwnym wypadku oblicz dolną granicę...
  43. $l2 = $limit; //Oraz górną granicę...
  44. }
  45. $kat = $_POST['kategoria'];
  46. $frazy = $_POST['slowa_szukaj'];
  47. $promien = $_POST['promien_szukaj'];
  48. $kodpoczt = $_POST['miasto_szukaj'];
  49. if (!empty($kat))
  50. $wh[] = "id_cat = '$kat'";
  51.  
  52. if (!empty($frazy))
  53. $wh[] = "tytul LIKE '%$frazy%'";
  54.  
  55. if (!empty($wh))
  56. $where = 'WHERE '.implode(' AND ', $wh);
  57. else
  58. $where = '';
  59.  
  60. $qqq = mysql_query("SELECT * FROM kody_new WHERE kod='$kodpoczt'");
  61. $dane = mysql_fetch_array($qqq);
  62.  
  63. $sql = mysql_query("SELECT *,
  64. ( 6371 * acos( cos( radians({$dane['lat']}) ) * cos( radians(o.lat ) ) * cos( radians(o.lng ) - radians({$dane['lng']}) ) + sin( radians({$dane['lat']}) ) * sin( radians(o.lat ) ) ) ) AS distance
  65.  
  66. FROM ogloszenia o
  67. $where
  68. GROUP BY o.id
  69. HAVING distance<$promien
  70. ORDER BY distance LIMIT $l1, $l2");
  71. while($row = mysql_fetch_array($sql)){
  72. $zebra++;
  73. $reszta = $zebra % 2;
  74. if($reszta === 0) {
  75. $kolor = '#f6f6f6; border-bottom:1px solid #fff;';
  76. }
  77. else {
  78. $kolor = '#e9e9e9; border-top:1px solid #dedede; border-bottom:1px solid #fff;';
  79. }
  80. echo '<table cellpadding="0" cellspacing="0" class="oglo_row" style="background:'.$kolor.'">
  81. <tr>
  82. <td valign="middle" width="80">
  83. ';
  84. $id22 = (int)$row['id'];
  85. $result12 = mysql_query("SELECT * FROM zdjecia WHERE id_oglo='$id22'");
  86. $img = mysql_fetch_array($result12);
  87. if(count($img['id']) == 0) {
  88. echo '<img src="theme/images/brak.png" width="80" height="65" style="vertical-align:middle;"> ';
  89. } else {
  90. echo '<img src="'.$img['img'].'" width="80" height="65" style="vertical-align:middle;">';
  91. }
  92. echo '</td><td valign="middle" width="230">';
  93. echo '<a href="ogloszenie-'.$row['id'].'-'.przyjazny_string($row['tytul']).'.html">'.stripslashes($row['tytul']).'</a><br />';
  94. $idwoj = $row['id_woj'];
  95. $wojq = mysql_query("SELECT * FROM wojewodztwa WHERE id='$idwoj'");
  96. $woj = mysql_fetch_array($wojq);
  97. echo '<div style="margin-top:5px;">'.$row['miasto'].' / '.$woj['nazwa'].'</div>';
  98. echo '</td>';
  99. $idk = (int)$row['id_cat'];
  100. $result2 = mysql_query("SELECT * FROM ogloszenia_categories WHERE id='$idk'");
  101. $row2 = mysql_fetch_array($result2);
  102. echo '<td valign="middle" width="120">';
  103. echo '<div style="margin-top:6px;">'.$row2['tytul'].'</div>';
  104. echo '</td><td valign="middle">';
  105. $q = mysql_query("SELECT * FROM dodatkowo WHERE id_oglo='$id22' LIMIT 3");
  106. echo '<table cellpadding="0" cellspacing="5" style="margin-top:6px; margin-left:20px;">';
  107. echo '<tr>';
  108. echo '<td align="left" style="color:#005c9f; font-size:11px;">';
  109. while($q2 = mysql_fetch_array($q)) {
  110. echo '&raquo; '.$q2['id_oglo_opcje'].'<br>';
  111. }
  112.  
  113. echo '</td></tr></table>';
  114. echo '</td><td valign="middle" align="right" width="18">';
  115. echo '<a href="ogloszenie-'.$row['id'].'-'.$row['url'].'-'.przyjazny_string($row['tytul']).'.html"><img src="theme/images/arrow.png" style="border:0;"></a>';
  116. echo '</td></tr></table>';
  117.  
  118. }
  119. list($records)=mysql_fetch_row(mysql_query("SELECT count(*) ogloszenia"));
  120.  
  121. if($records >= 1) {
  122.  
  123. $pag['posts'] = $records; //Ilość rekordów...
  124. $pag['limit'] = $limit; //Rekordów na stronę...
  125. $pag['page'] = $_GET['page']; //Aktualna strona...
  126. $pag['separator'] = '?'; //Separatror - ? lub & więcej o tym w dalszej części.
  127. $pag['url_class'] = 'pages'; //Klasa linków paginowania w CSS...
  128. $pag['a_pg_class'] = 'active_pg'; //Klasa numeru aktywnej strony.
  129. $pag['page_label'] = 'Strona:'; //Etykieta z napisem ''Strona: x/x'' obok paginacji.
  130.  
  131. ECHO print_pagination($pag);
  132. }
  133.  
  134. echo '</td>';
  135. echo '</tr></table></div>';
  136. include('../theme/stopka.php');
  137.  
  138. ?>
  139. </div>
  140. </div>
  141. <? db_close(); ?>
  142. </body>
  143. </html>


Dopiero po wpisaniu kod: 00-001 prmien np:200 wyskakują rekordy

Ten post edytował crew123 1.11.2012, 22:12:55
Go to the top of the page
+Quote Post
Pawel_W
post
Post #13





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


ludzie, po raz kolejny proszę, to forum jest od tego, żeby pomagać/naprowadzać, a nie podawać gotowce...
Go to the top of the page
+Quote Post
crew123
post
Post #14





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

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


Dla wyjaśnienia przy zapytaniu jest taki błąd: Parse error: syntax error, unexpected T_EXIT
Go to the top of the page
+Quote Post
d3ut3r
post
Post #15





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


To jest przecież błąd składni i jest spowodowany skopanym kodem w miejscu xxx, jaki sens jest pisania posta za każdym razem gdy skrypt się nie uruchamia ? no sorry ale jako programista nawet początkujący powinieneś wiedzieć co to jest syntax error.

Na gotowce na forum też jest dział, trzeba po prostu się zdecydować albo chcę to zrobić sam albo chcę żeby ktoś zrobił to za mnie.
Go to the top of the page
+Quote Post
crew123
post
Post #16





Grupa: Zarejestrowani
Postów: 89
Pomógł: 0
Dołączył: 25.02.2012

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


Dobra dałem sobie już z tym radę tylko jeszcze mam do Was pytanie jak zliczyć rekordy które są distance<$promien poprzez count?
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 - 08:01