表 1 には郵便番号とその位置情報 (経度、緯度など) が含まれており、表 2 にはプロパティと住所が含まれています。表 1 の郵便番号の経度と緯度を住所に接続する必要があります。表 2 で >>
特定の郵便番号から半径 (x) マイル以内にある最も近いプロパティを提供する検索を作成できるようにするため...
これを行う方法がわかりません。2 つのテーブルを結合する必要がありますか? または、両方から同時に情報を取得する検索を行うことはできますか?
ありがとう!
まず、これら2つのテーブル間の関係を構築する必要があります。郵便番号を使用するか、代理キーを使用できます。次に、2つのテーブルを結合して検索を実行できます。
私があなたの問題を正しく理解している場合、問題は、2つの住所が同じ郵便番号を持っているにもかかわらず、サーバーが各住所が互いにどれだけ近いか遠いかを判断できないことです。
言い換えさせてください。アドレスA、B、およびCがあり、それらがすべて同じ郵便番号を持っている場合、(アドレステーブルにも座標がない限り)AがBまたはCからどれだけ近いかを判断する方法はありません。
あなたが言われたように、可能な回避策は、テーブルを関連付けるために郵便番号だけを使用することです。次に、次のような単純な結合クエリが必要です。
SELECT <fields>
FROM TABLE1 a
join TABLE2 b
on
( a.zipcode=b.zipcode )
WHERE a.zipcode=<Your_search_here>
その例では、郵便番号は選択したフィールドにある必要はありません。
これがお役に立てば幸いです=)
郵便番号テーブルで座標に一致する郵便番号を選択してから、住所にその郵便番号がある住所テーブルに参加する必要があります。
これは私が作成したサイトから取得したもので、クライアントが町をスキップして支払いをしなかったものです-お楽しみください:
<?php
$res = mysqli_query($dh,
"SELECT `items`.`id`, `items`.`title`, `items`.`postcode`, `geodata`.`lat`,
`geodata`.`long`, (6371.009*acos(cos(radians(" . $_SESSION['lat'] . "))*
cos(radians(`geodata`.`lat`))*cos(radians(`geodata`.`long`)-radians(" .
$_SESSION['long'] . "))+sin(radians(" . $_SESSION['lat'] . "))*
sin(radians(`geodata`.`lat`)))) AS `distance`
FROM `items`, `geodata`
WHERE `geodata`.`postcode` = `items`.`postcode`
ORDER BY `distance` ASC"
);
echo '<table>';
while($item = mysqli_fetch_assoc($res))
{
echo '<tr>' .
'<td><a href="/' . $item['id'] . '">' . $item['title'] . '</a></td>' .
'<td>' . $item['postcode'] . ' (' . number_format($item['distance']) . 'km away)</td>' .
'</tr>';
}
echo '</table>';
?>
この例で$_SESSION['lat']
は$_SESSION['long']
、ユーザーの場所が含まれています。
このような MySQL テーブルgeocode
も必要です。
postcode | lat | long
200 | -35.2765521 | 149.1220236
810 | -12.3808934 | 130.8773842
(これらはオーストラリアから取られました)。
items
これは、距離が km で示されている、最も近いものから順にのリストを返します。