MySQL - Perl:如何在Perl示例中提交的"x"里面提交的"zipcode"中获取邮政编码数组

Ste*_*yne 0 mysql perl zipcode latitude-longitude

我在这里发现了很多计算和一些php的例子,大多数都是我的头脑.

我找到了这个例子:

SELECT b.zip_code, b.state,
       (3956 * (2 * ASIN(SQRT(
       POWER(SIN(((a.lat-b.lat)*0.017453293)/2),2) +
       COS(a.lat*0.017453293) *
       COS(b.lat*0.017453293) *
       POWER(SIN(((a.lng-b.lng)*0.017453293)/2),2))))) AS distance
FROM zips a, zips b
WHERE
       a.zip_code = '90210' ## I would use the users submitted value
GROUP BY distance
having distance <= 5; ## I would use the users submitted value
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解如何使用我的数据库实现查询.

它看起来像我需要的查询.

但是,我甚至无法找到/理解b.zip_code实际上是什么!(什么是b.zips a, zips b?)

我也不需要state在查询中.

我的mySQL数据库结构是这样的:

    ZIP | LAT     | LONG
  33416 | 26.6654 | -80.0929
Run Code Online (Sandbox Code Playgroud)

我写这个是为了尝试返回某种结果(不是基于上面的查询)但是,它只会踢出一个邮政编码.

## Just for a test BUT, in reality I desire to SELECT a zip code WHERE ZIP = the users submitted zip code
## not by a submitted lat lon. I left off the $connect var, assume it's there.
my $set1 = (26.6654 - 0.20);
my $set2 = (26.6654 + 0.20);
my $set3 = (-80.0929 - 0.143);
my $set4 = (-80.0929 + 0.143);
my $test123 = $connect->prepare(qq{SELECT `ZIP` FROM `POSTAL`
WHERE `LAT` >= ? AND `LAT` <= ? 
AND `LONG` >= ? AND `LONG` <= ?})  or die "$DBI::errstr";
$test123->execute("$set1","$set2","$set3","$set4") or die "$DBI::errstr";
my $cntr;
while(@zip = $test123->fetchrow_array()) {
    print qq~$zip[$cntr]~;
    push(@zips,$zip[$cntr]);
    $cntr++;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我是新手所以,我需要一些手握这里的详细解释.

因此,在Perl中,如何将邮政编码从用户提交的邮政编码推送到数组中,用户提交的英里数为DISTANCE.可以是正方形而不是圆形,而不是对某个特征的批评.越快越好.

DVK*_*DVK 5

我将解决问题的一小部分但至关重要的部分:

但是,我甚至无法找到/理解b.zip_code实际上是什么!(什么是"b."和"拉链a,拉链b"?)

基本上,查询连接两个表.但是这两个表被连接其实都是同一个表- "拉链"(换句话说,它加入"拉链"表与自身")当然,因为查询的其余部分需要时,您指的是理解. "zips"表的第一个副本以及何时到"zips"表的第二个副本,您将为每个副本提供一个表别名 - 即"a"和"b".

因此,"b.xxx"表示"来自表拉链的列xxx,来自正在连接的该表的SECOND实例".