假设我有一个名为“users”的表,其中包含以下相关列:
- 用户名
- 邮政编码
我们还假设我有一个名为“shops”的表,其中包含以下相关列:
- 店铺名称
- 邮政编码
我们还假设我有一个名为“preferred_shops”的表,其中包含以下相关列:
- 店铺名称
- 用户名
我们还假设我有一个名为“zipData”的表,其中包含以下相关列:
- 邮政编码
- 纬度
- 隆
目前我可以成功运行此代码:
$lat="49.886436"; // Value should be obtained from the zipData table by doing a "SELECT FROM zipData WHERE zipcode=(users_zip_code)" or similar query
$lon="-97.14553"; // Value should be obtained from the zipData table by doing a "SELECT FROM zipData WHERE zipcode=(users_zip_code)" or similar query
$radius=5;
$query="SELECT zipcode FROM zipData
WHERE (POW((69.1*(lon-\"$lon\")*cos($lat/57.3)),\"2\")+
POW((69.1*(lat-\"$lat\")),\"2\"))<($radius*$radius)";
上面的查询将成功显示在提供的纬度/经度的给定半径内的所有其他邮政编码,但我没有兴趣知道还有哪些其他邮政编码......我想知道半径内有哪些商店。
您可以提供的任何帮助将不胜感激。
==== 编辑,因为我意识到它实际上有点复杂 ====
这是我需要做的...
- 从“用户”表中检索用户的邮政编码
- 从 zipData 表中查找用户的纬度/经度
- 查找给定半径内的所有商店,这些商店也在“preferred_shops”表中,给定用户在“用户名”列中
需要考虑的问题:“zipData”中的邮政编码没有空格,但“users”和“shops”中的邮政编码出于美观原因有空格……例如“A1A 1A1”格式的加拿大邮政编码
==== 编辑发布解决方案 ====
系统说我不能回答我自己的问题。这听起来很奇怪,因为在其他人的帮助下我已经找到了答案。作为一项工作,我正在编辑原始帖子。这是解决方案...
好的,所以我想通了(在回复的人的帮助下)......这就是我所做的。
它可能会更短更干净,所以如果你知道更好的方法,请随时让它变得更好。
$query = "SELECT * FROM preferred_shops
WHERE `username`='{$_SESSION['account_name']}'
";
$result = mysql_query($query);
if (mysql_errno())
{
die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) );
}
$num_rows = mysql_num_rows($result);
while($row = mysql_fetch_array($result))
{
// Get user's preferences and postal code
$query2 = "SELECT * FROM seekers
WHERE `username`='{$_SESSION['account_name']}'
";
$result2 = mysql_query($query2);
if (mysql_errno())
{
die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) );
}
$num_rows2 = mysql_num_rows($result2);
$row2 = mysql_fetch_array($result2);
$radius=$row2['radius']; // Didn't mention that is column was in the table but that didn't matter... the value could have come from anywhere.
// Get user's lat/lon
// Remove white space from the postal code
$query3="SELECT * FROM zipData WHERE zipcode=replace('{$row2['postal']}',' ','')";
$result3 = mysql_query($query3);
if (mysql_errno())
{
die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) );
}
$num_rows3 = mysql_num_rows($result3);
$row3 = mysql_fetch_array($result3);
$lat=$row3["lat"];
$lon=$row3["lon"];
$query4="SELECT shop_name FROM zipData,shops
WHERE (POW((69.1*(lon-\"$lon\")*cos($lat/57.3)),\"2\")+POW((69.1*(lat-\"$lat\")),\"2\"))<($radius*$radius)
AND replace(shops.zipcode,' ','') = zipData.zipcode
AND shops.shop_name={$row['shop_name']}
";
$result4 = mysql_query($query4);
if (mysql_errno())
{
die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) );
}
$num_rows4 = mysql_num_rows($result4);
$num_jobs=$num_rows4;
$i=0;
while($row4 = mysql_fetch_array($result4))
{
$shopArray[$i]=$row4["shop_name"];
$i++;
}
var_dump($shopArray);
}