我正在根据邮政编码和距离进行搜索以搜索类别。我想要该邮政编码的 10 英里收音机中特定类别的结果。
我的表格格式是
CREATE TABLE IF NOT EXISTS `uk_data` (
`slno` int(10) NOT NULL AUTO_INCREMENT,
`comp_name` varchar(150) DEFAULT NULL,
`comp_no` varchar(50) DEFAULT NULL,
`comp_street` varchar(100) DEFAULT NULL,
`comp_area` varchar(100) DEFAULT NULL,
`comp_post_code` varchar(15) DEFAULT NULL,
`comp_phone` varchar(100) DEFAULT NULL,
`comp_phone1` varchar(100) DEFAULT NULL,
`cat1` varchar(100) DEFAULT NULL,
`cat2` varchar(100) DEFAULT NULL,
`cat3` varchar(100) DEFAULT NULL,
`cat4` varchar(100) DEFAULT NULL,
`cat5` varchar(100) DEFAULT NULL,
`cat6` varchar(100) DEFAULT NULL,
`cat7` varchar(100) DEFAULT NULL,
`cat8` decimal(9,6) DEFAULT NULL,
`cat9` decimal(9,6) DEFAULT NULL,
`cat10` varchar(15) DEFAULT NULL,
PRIMARY KEY (`slno`),
UNIQUE KEY `Phone` (`comp_phone`),
KEY `cat10` (`cat10`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=31717 ;
现在
cat10 is postcode
cat8 is Latitude
cat9 is Longitude
我能够计算距离并在纬度和经度的特定英里范围内得到结果
SELECT cat10, ( 3959 * acos( cos( radians( {$coords['Latitude']} ) )
* cos( radians( cat8 ) ) * cos( radians( cat9 ) - radians( {$coords['Longitude']} ) )
+ sin( radians( {$coords['Latitude']} ) ) * sin( radians( cat8 ) ) ) )
AS distance FROM uk_data
HAVING distance <= {$radius} ORDER BY distance
$coords = array('Latitude' => "57.149727", 'Longitude' => "-2.094735");
$radius = .5;
$uk_data_radious = uk_data_radious_test($coords,$radius,$q,$pc);
现在我正在尝试进行完整搜索以获取具有特定邮政编码距离的类别..
SELECT *, ( 3959 * acos( cos( radians( {$coords['Latitude']} ) ) * cos( radians( cat8 ) ) * cos( radians( cat9 ) - radians( {$coords['Longitude']} ) ) + sin( radians( {$coords['Latitude']} ) ) * sin( radians( cat8 ) ) ) ) AS distance
FROM uk_data where
cat1 like :cat OR
cat2 like :cat OR
cat3 like :cat OR
cat4 like :cat OR
cat5 like :cat OR
cat6 like :cat OR
cat7 like :cat
HAVING distance <= {$radius}
ORDER BY distance
但这不起作用。HAVING
我知道 Query 中有一个错误,但不知道如何使用3 个参数和 Where 一起处理此查询Postcode Distance and categories
错误
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error
or access violation: 1064 You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ':cat OR cat2
like :cat OR cat3 like :cat OR cat4 like :cat OR ' at line 4' in
D:\Winginx\home\****\public_html\functions.php:365 Stack trace: #0
D:\Winginx\home\****\public_html\functions.php(365): PDO->query('SELECT *, ( 395...') #1
D:\Winginx\home\***\public_html\miles_output.php(14): uk_data_radious_test(Array, 0.5,
'Tool') #2 {main} thrown in D:\Winginx\home\***\public_html\functions.php on line 365