假设我有一个名为“users”的表,其中包含以下相关列:
我们还假设我有一个名为“商店”的表,其中包含以下相关列:
我们还假设我有一个名为“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”中的邮政编码没有空白区域,但“用户”和“商店”中的邮政编码由于美观原因而具有空格...例如“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);
}
答案 0 :(得分:1)
您需要加入商店表
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
shops.zipcode = zipdata.zipcode
答案 1 :(得分:0)
select shopname from shops where zipcode in ( <your other working query> )