【问题标题】:need help creating a mysql query需要帮助创建一个 mysql 查询
【发布时间】:2013-03-26 20:31:08
【问题描述】:

假设我有一个名为“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)";

上面的查询将成功显示在提供的纬度/经度的给定半径内的所有其他邮政编码,但我不想知道还有哪些其他邮政编码...我想知道里面有哪些商店半径。

如果您能提供任何帮助,我们将不胜感激。

==== 编辑是因为我意识到它实际上有点复杂 ====

这是我需要做的……

  • 从“users”表中检索用户的邮政编码
  • 从 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);
}

【问题讨论】:

    标签: php mysql


    【解决方案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
    

    【讨论】:

    • 请您看一下我最近的编辑。起初我没有意识到它比我最初想象的还要复杂。
    【解决方案2】:
    select shopname from shops where zipcode in ( <your other working query> )
    

    【讨论】:

    • 请您看一下我最近的编辑。起初我没有意识到它比我最初想象的还要复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多