|
Тема |
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 във формата за търсене спрямо вече въведените в таблицата за дистрибуторите, не връща никакъв резултат. Някой би ли погледнал кода и да каже какво не е на ред?
|
| |
|
|
|