【发布时间】:2010-05-13 14:07:41
【问题描述】:
我有一个加拿大邮政编码数据库和用于搜索的脚本。但由于某种原因,我没有根据邮政编码搜索获得最近的露营地。我的 SQL 查询有问题,因为当我选择露营地时,它显示的业务范围不是最近的。
当我运行 SQL 查询以按距离顺序获取范围内的邮政编码时,我得到了这个 PHP
Array (
[N0C 1K0] => 0
[N0C 1G0] => 9.36
[N0C 1L0] => 9.36
[N0C 1E0] => 9.97
[N0H 2S0] => 12.95
[N0C 1H0] => 13.01
[N0G 1R0] => 15.04
[N0C 1B0] => 19.03
[N0G 2A0] => 19.07
[N0H 1C0] => 19.55
[N0G 1N0] => 20.24
[N0C 1J0] => 21.67
[N0G 2L1] => 25.39
[N0G 2L3] => 25.39
[N0G 2L0] => 25.39
[N0H 1R0] => 25.8 campground found
[N0C 1C0] => 25.83
[N0H 2V0] => 27.43
[N0G 1C0] => 29.1
....
[N0G 1A0] => 41.54
[L0N 1G0] => 41.86
[N0G 2J0] => 41.94
[N0G 2V0] => 42.21
[L0M 1P0] => 43.21
[N0H 2P0] => 43.76
[N0G 1Y0] => 44.27
[L0M 1L0] => 44.27
[N0G 2P0] => 44.28 campground found
[L0M 1G0] => 44.48
[N4L 1R4] => 44.49 campground found
)
我想获取 25.8 的露营地详细信息,但我要的是 44.28 的露营地详细信息,求助!
SELECT camp_id FROM campgrounds WHERE postal = '".addslashes($key)."' LIMIT 1;
我应该有一个 ORDER BY 吗? - 我确实试过这个。但在我的查询中可能是错误的顺序。
【问题讨论】:
-
先做一些基本的调试。
$key包含什么? -
我正在使用这个 PHP CLASS micahcarrick.com/04-19-2005/…;函数 get_zips_in_range 然后我将获取结果并进行 foreach。 foreach ($getagents as $key => $value) {} 要回答您的问题,$key 是数组中的邮政编码,$value 是距离。我确实使用这个获得了露营地的结果,我只是不确定如何获得最近的结果,出于某种原因,它按照它们如何插入数据库对它们进行排序。我也尝试了几个 ORDER BY,没有给出最接近的。
-
所以给定数组元素的值包含以公里为单位的距离和(可选)字符串“campground found”?如果您包含您正在使用的 foreach 循环,也许会有所帮助。
-
$postal = 'N0C 1K0'; $范围 = 50; DBSelectFields("SELECT latitude, longitude FROM postalcodes WHERE postal = '".addslashes($postal)."'"); $getpostal = 新邮政编码类别; $getcampgrounds = $getpostal->get_zips_in_range($latitude, $longitude, $postal, $range, 'distance_asc'); foreach ($getcampgrounds as $key => $value) { $campgrounds = DBSelectAllArrays("SELECT camp_id FROM campgrounds WHERE postal = '".addslashes($key)."' LIMIT 1"); foreach ($campgrounds as $camp) { $i++; $camp[] = 数组($camp); } if ($i >= 1) 中断; }