crew123
1.11.2012, 09:57:04
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
Pawel_W
1.11.2012, 11:11:50
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)
maly_swd
1.11.2012, 15:00:53
W $dane[....] podajesz punkt od ktorego ma szukac.
SELECT
( 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
FROM TABELA ob
GROUP BY ob.miejscowosc
HAVING distance<25
ORDER BY distance
crew123
1.11.2012, 16:22:04
o co chodzi z tym ob?
ogólnie mam problem z zapytaniem, wyciągam odległość tym kodem:
$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.
CuteOne
1.11.2012, 16:39:47
Jest to nazwa kolumny z aliasem tabeli innymi słowy TABELA.KOLUMNA z tego co pamiętam "_lat" oznacza latitude (google -> google map latitude)
crew123
1.11.2012, 16:44:43
Niestety kod, który napisał mały wyświetla błąd fetch_array
maly_swd
1.11.2012, 16:53:55
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)
crew123
1.11.2012, 17:00:51
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:

ogloszenia:
maly_swd
1.11.2012, 19:30:51
SELECT
( 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
FROM ogloszenia o
GROUP BY o.id
HAVING distance<25
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[..]
crew123
1.11.2012, 20:49:23
Moglbys mi powiedziec jeszcze dlaczego przy przejsciu na 2gą strone wyszukiwania (1,2...4,5) wyskakuje fetch_array lub bez podania promienia czy kodu?
maly_swd
1.11.2012, 21:24:48
ze co?
Pewnie masz blad w zapytaniu... nie podstawiasz danych lub cos w ten desen.
Wyswietl sobie echo mysql_error();
crew123
1.11.2012, 22:05:59
Jak dla mnie wszystko jest ok, zamieszcę tutaj plik na którym pracuje:
<?
include ('../include/config.php');
db_connect();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<title>Wyszukiwarka -
<?php echo $ustawienia['tytul']; ?></title>
<?php include('../theme/head.php') ?>
</head>
<body>
<div id="content">
<?php
// pobieramy dane usera
$user_data = get_user_data();
<div id="header">
<div id="hdr_lewa">
<div class="logo"></div>
</div>
<div id="hdr_prawa">';
include('../theme/login.php');
</div>
</div>';
include('../theme/menu.php');
<div id="wrapper">
<table cellpadding="0" cellspacing="0" width="1002">
<tr>
<td valign="top" width="234" style="background:#f6f6f6;">';
include('../theme/lewa.php');
echo '</td><td valign="top" width="534">'; echo '<div class="naglowek">Wyszukiwarka</div>'; include('pagination.php');
$limit = $ustawienia['ogloszen_na_strone']; // Ilość pozycji na stronę...
$pg = $_GET['page']; // Pobranie do zmiennej numeru strony...
$l1 = 0;
$l2 = $limit; //Jeśli zmienna $pg ma pustą zawartość nastawiamy granice od 0 do wartości $limit
} else {
$l1 = $limit * $pg - $limit; //W przeciwnym wypadku oblicz dolną granicę...
$l2 = $limit; //Oraz górną granicę...
}
$kat = $_POST['kategoria'];
$frazy = $_POST['slowa_szukaj'];
$promien = $_POST['promien_szukaj'];
$kodpoczt = $_POST['miasto_szukaj'];
$wh[] = "id_cat = '$kat'";
$wh[] = "tytul LIKE '%$frazy%'";
$where = 'WHERE '.implode(' AND ', $wh); else
$where = '';
$qqq = mysql_query("SELECT * FROM kody_new WHERE kod='$kodpoczt'");
( 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
FROM ogloszenia o
$where
GROUP BY o.id
HAVING distance<$promien
ORDER BY distance LIMIT $l1, $l2");
$zebra++;
$reszta = $zebra % 2;
if($reszta === 0) {
$kolor = '#f6f6f6; border-bottom:1px solid #fff;';
}
else {
$kolor = '#e9e9e9; border-top:1px solid #dedede; border-bottom:1px solid #fff;';
}
echo '<table cellpadding="0" cellspacing="0" class="oglo_row" style="background:'.$kolor.'"> <tr>
<td valign="middle" width="80">
';
$id22 = (int)$row['id'];
$result12 = mysql_query("SELECT * FROM zdjecia WHERE id_oglo='$id22'"); if(count($img['id']) == 0
) { echo '<img src="theme/images/brak.png" width="80" height="65" style="vertical-align:middle;"> '; } else {
echo '<img src="'.$img['img'].'" width="80" height="65" style="vertical-align:middle;">'; }
echo '</td><td valign="middle" width="230">'; echo '<a href="ogloszenie-'.$row['id'].'-'.przyjazny_string
($row['tytul']).'.html">'.stripslashes($row['tytul']).'</a><br />'; $idwoj = $row['id_woj'];
$wojq = mysql_query("SELECT * FROM wojewodztwa WHERE id='$idwoj'"); echo '<div style="margin-top:5px;">'.$row['miasto'].' / '.$woj['nazwa'].'</div>'; $idk = (int)$row['id_cat'];
$result2 = mysql_query("SELECT * FROM ogloszenia_categories WHERE id='$idk'"); echo '<td valign="middle" width="120">'; echo '<div style="margin-top:6px;">'.$row2['tytul'].'</div>'; echo '</td><td valign="middle">'; $q = mysql_query("SELECT * FROM dodatkowo WHERE id_oglo='$id22' LIMIT 3"); echo '<table cellpadding="0" cellspacing="5" style="margin-top:6px; margin-left:20px;">'; echo '<td align="left" style="color:#005c9f; font-size:11px;">'; echo '» '.$q2['id_oglo_opcje'].'<br>'; }
echo '</td></tr></table>'; echo '</td><td valign="middle" align="right" width="18">'; echo '<a href="ogloszenie-'.$row['id'].'-'.$row['url'].'-'.przyjazny_string
($row['tytul']).'.html"><img src="theme/images/arrow.png" style="border:0;"></a>'; echo '</td></tr></table>';
}
if($records >= 1) {
$pag['posts'] = $records; //Ilość rekordów...
$pag['limit'] = $limit; //Rekordów na stronę...
$pag['page'] = $_GET['page']; //Aktualna strona...
$pag['separator'] = '?'; //Separatror - ? lub & więcej o tym w dalszej części.
$pag['url_class'] = 'pages'; //Klasa linków paginowania w CSS...
$pag['a_pg_class'] = 'active_pg'; //Klasa numeru aktywnej strony.
$pag['page_label'] = 'Strona:'; //Etykieta z napisem ''Strona: x/x'' obok paginacji.
ECHO print_pagination
($pag); }
echo '</tr></table></div>'; include('../theme/stopka.php');
?>
</div>
</div>
<? db_close(); ?>
</body>
</html>
Dopiero po wpisaniu kod: 00-001 prmien np:200 wyskakują rekordy
Pawel_W
1.11.2012, 22:06:16
ludzie, po raz kolejny proszę, to forum jest od tego, żeby pomagać/naprowadzać, a nie podawać gotowce...
crew123
2.11.2012, 10:14:18
Dla wyjaśnienia przy zapytaniu jest taki błąd: Parse error: syntax error, unexpected T_EXIT
d3ut3r
2.11.2012, 10:18:25
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.
crew123
2.11.2012, 11:50:54
Dobra dałem sobie już z tym radę tylko jeszcze mam do Was pytanie jak zliczyć rekordy które są distance<$promien poprzez count?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.