2013-03-26 160 views
0

假設我一個有一個名爲「用戶」,它具有以下相關欄目表:需要幫助創建MySQL查詢

  • 用戶名
  • 郵編

讓我們假設我有一個名爲「商店」的表具有以下相關列:

  • 店名
  • 郵編

讓我們假設我有一個名爲 「preferred_shops」 表,該表具有以下相關欄目:

  • shop_name
  • 用戶名

讓我們假設我有一個名爲「zipData」的表具有以下相關列:

  • 郵編
  • LAT
  • LON

目前我可以運行此代碼成功:

$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」中的郵政編碼沒有空白區域,但「用戶」和「商店」中的郵編有美化空間的空白區域,如加拿大郵政編碼位於「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); 
} 

回答

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 
+0

你是否真的很看我最近的編輯。起初我並沒有意識到它比我想象的要複雜得多。 – 2013-03-26 21:02:55

0
select shopname from shops where zipcode in (<your other working query>) 
+0

你會這麼好心,看我最近編輯。起初我並沒有意識到它比我想象的要複雜得多。 – 2013-03-26 21:03:33