Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 18:08 25.06.24 
Компютри и Интернет
   >> Бази данни
*Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема Zip Code Searchнови  
Автор $burov (начинаещ)
Публикувано26.05.03 18:33



Хайде пак по старата тема.

База данни с потребители. Трябва да има търсене по няколко критерия, включително и USA Zip Code. С помощта на google стигнах до това

CREATE TABLE dealers (
Dealer_ID int(11) NOT NULL auto_increment,
Dealer_Name varchar(50) NOT NULL default '',
Dealer_Address varchar(50) default NULL,
Dealer_City varchar(35) default NULL,
Dealer_State char(2) default NULL,
Dealer_Zip varchar(5) default NULL,
PRIMARY KEY (Dealer_ID),
KEY Dealer_Zip (Dealer_Zip),
KEY Dealer_Name (Dealer_Name),
KEY Dealer_Address (Dealer_Address),
KEY Dealer_City (Dealer_City)
) TYPE=MyISAM;

CREATE TABLE zipcode (
ZIPCodeID int(9) NOT NULL auto_increment,
ZIPCode varchar(5) NOT NULL default '',
Latitude double(7,5) NOT NULL default '0.00000',
Longitude double(7,5) NOT NULL default '0.00000',
PRIMARY KEY (ZIPCodeID),
KEY ZIPCode (ZIPCode),
KEY Latitude (Latitude),
KEY Longitude (Longitude)
) TYPE=MyISAM;

в тази последната таблица има над 42 000 записа с необходимата информация

след малко "орязване" на ненужните неща, заявката има следния вид:

"SELECT dealers. * ,
( 3963 * acos( truncate(sin( zipcodesearch.latitude / 57.2958 ) * sin( zipcode.latitude / 57.2958 ) + cos( zipcodesearch.latitude / 57.2958 ) * cos( zipcode.latitude / 57.2958 ) * cos( zipcode.longitude / 57.2958 - zipcodesearch.longitude / 57.2958 ),8) ) ) AS Dealer_Distance FROM dealers, zipcode, zipcode AS zipcodesearch

WHERE

(zipcodesearch.ZIPCode = '$MyZip'

AND (dealers.Dealer_Zip = zipcode.ZIPCode)

AND (( 3963 * acos( truncate(sin( zipcodesearch.latitude / 57.2958 ) * sin( zipcode.latitude / 57.2958 ) + cos( zipcodesearch.latitude / 57.2958 ) * cos( zipcode.latitude / 57.2958 ) * cos( zipcode.longitude / 57.2958 - zipcodesearch.longitude / 57.2958 ),8) ) ) < '$MyRadius' ";

$MyZip - zip code на потребителя
$MyRadius - колко miles около $MyZip да обхване търсенето

Обаче не работи! Дори когато въвеждам данните 1:1 във формата за търсене спрямо вече въведените в таблицата за дистрибуторите, не връща никакъв резултат. Някой би ли погледнал кода и да каже какво не е на ред?



Тема Re: Zip Code Searchнови [re: $burov]  
Автор salle (член)
Публикувано26.05.03 20:40



Извинявам се, че съм забравил много отдавна простите математически истини ама откъде идва 57.2958 ?



Тема Re: Zip Code Searchнови [re: salle]  
Автор $burov (начинаещ)
Публикувано26.05.03 20:44



Незнам откъде идва 57.2958 - така е написано в онзи скрипт.

а за версия 4.xx - то хубаво ги има тези функции, обаче на хоста все още съм с 3.xx



Тема Re: Zip Code Searchнови [re: $burov]  
Автор salle (член)
Публикувано26.05.03 21:07



Не 4.xx

4.1 е доста по-различна от 4.0



Тема Re: 57.2958нови [re: salle]  
Авторs_dimi (Нерегистриран)
Публикувано27.05.03 05:08



V ukazaniata kam doma6noto mi po bazi danni pi6e slednoto:

d = r*acos(
cos( p1.latitude*n /180 ) cos(p2.latitude*n/180)
cos( (p1.longtitude-p2.longtitude)*n/180 )
+
sin( p1.latitude*n/180) sin(p2.latitude*n/180)
)

e formulata za namirane na raztoianieto m/u 2 to4ki, kadeto
r = 6370 km
n = 3.14



Тема Re: 57.2958нови [re: s_dimi]  
Автор $burov (начинаещ)
Публикувано27.05.03 09:58



В случая r какво се явява, някаква константа ли е?



Тема Re: 57.2958 [re: $burov]  
Автор salle (член)
Публикувано27.05.03 12:59



r не е ли Радиуса в който се търси?

А в MySQL вместо n=3.14 можеш да използваш PI()



Тема Re: 57.2958нови [re: $burov]  
Автор mn_t (разпрашен)
Публикувано27.05.03 18:17



6370km е приблизително средният радиус на Земята.
57,2958 = 180/pi



Тема Re: Zip Code Searchнови [re: $burov]  
Автор fiffy ()
Публикувано27.05.03 21:27



Eto source-a na ne6to koeto bqh prawil predi i rabote6e... bazata e w po-razli4en wariant, no ideqta e sy6tata - zip sys latitude i longitude i tyrsene za nai-blizyk zip do daden takyw.... Koda e malko razpilqn, no ne e trudno da se sledwa logikata...

$userdata = mysql_query("SELECT ZIP_CODE, CITYSTNAME, STATE, LAT, LNG FROM ZIP_Database WHERE ZIP_CODE >=" . $zip . " LIMIT 1;")

or die ("Userdata query error.");



$userzip = mysql_result($userdata, 0, "ZIP_CODE");

if ($userzip <> $zip) print "$zip not found in database. Using <b>$userzip</b><p>";



$result = mysql_query("SELECT ID, Zip FROM ZIP_Stores")

or die ("Could not retrieve stores data");



$stores = array();

while($row = mysql_fetch_row($result))

{



$storedata = mysql_query("SELECT LAT, LNG FROM ZIP_Database WHERE ZIP_CODE=" . $row[1] . " LIMIT 1;")

or die ("Storedate query error.");



$lat1 = mysql_result($storedata, 0, "LAT");

$lng1 = mysql_result($storedata, 0, "LNG");

$lat2 = mysql_result($userdata, 0, "LAT");

$lng2 = mysql_result($userdata, 0, "LNG");



$a1 = sin($lat1/57.3) * sin($lat2/57.3);

$a2 = cos($lat1/57.3) * cos($lat2/57.3) * cos($lng2/57.3 - $lng1/57.3);

$a = $a1 + $a2;

$dist = 3959*atan(sqrt(1-$a*$a)/$a);



if ($dist <= $distance) $stores[$row[0]] = $dist;

}



asort ($stores);

reset ($stores);

?>



<b>Store Results:</b><p>

<table>

<tr><td width="270"><b>Address</b></td><td width="150"></td><td width="120" align="center"><b>Distance</b></td></tr>



<?php



while (list ($id, $dist) = each ($stores))

{

$thisstore = mysql_query("SELECT Address, City, State, Zip FROM ZIP_Stores WHERE ID=$id");

$addr = mysql_result($thisstore, 0, "Address");

$statezip = mysql_result($thisstore, 0, "City") . ", " . mysql_result($thisstore, 0, "State") . " " . mysql_result($thisstore, 0, "Zip");



?>



<tr><td><a href="store.php?storeID=<?php print $id; ?>"><?php print $addr; ?></a></td>

<td><?php print $statezip; ?></td>

<td align=center><?php print round($dist,2); ?></td></tr>

</table>



Тема Благодаря на всичкинови [re: $burov]  
Автор $burov (начинаещ)
Публикувано27.05.03 21:34



Благодаря Ви, определено ми се изясниха малко нещата. При първа възможност ще си направя някой преработки на кода и съответните тестове и ако се получи ще пусна един линк към скрипта за да се използва свободно.




Страници по тази тема: 1 | 2 | >> (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.