0

私はかなり簡単だと確信しているクエリの助けを探していますが、木に木が見えません。誰かが助けてくれることを願っています。

ユーザーのデータベースを検索し、ユーザー間の距離を計算して、次のように結果を出力しています。

$result = queryMysql("SELECT user FROM $table WHERE x= 'y'");
$num = mysql_num_rows($result);

for ($j = 0 ; $j < $num ; ++$j)
    {
    $row = mysql_fetch_row($result);
    if ($row[0] == $user) continue;

    $query = "SELECT * FROM $table WHERE user='$row[0]'";
    $res=mysql_query($query);
    $results=mysql_fetch_assoc($res);
    $userlocation=$results['location'];
    //run distance function which outputs $distance
    if($distance <= $maximumdistance)
    {
           //echo user info
    }

私がやりたいことは、距離関数を実行し、それが true として返すユーザーを識別し、ユーザー ID (一意) を配列またはその他の形式で取得することです。これにより、結果をカウントし、それらを実行して出力することができます。 .

これは理にかなっていますか、および/またはこれを行うためのより良い方法はありますか?

ありがとう

4

2 に答える 2

0

距離というと、地理的な距離ですか?MySQL は、距離の計算を実行する際に PHP よりもはるかに高速です。個人的には、ここで私がやりたいことです。フィールドuser_id1user_id2、およびdistanceを持つuser_distancesという名前の別のテーブルを作成します。user_id1 と user_id2 を一緒に主キーにします。

それでは、そのテーブルに距離を入力しましょう。おそらくユーザーの都市/郵便番号に基づいて、ユーザーの緯度と経度が既にわかっていると仮定します (そうでない場合は、郵便番号データベースを取得してください)。あなたはこのようなことをするつもりです:

INSERT INTO user_distances 
    (user_id1, user_id2, distance)
SELECT 
    u1.user_id,
    u2.user_id,
    (69.172 * SQRT( POW(u1.latitude-u2.latitude, 2) + POW(u1.longitude-u2.longitude, 2) ) ) as `distance`
FROM
    users as u1,
    users as u2
WHERE
    u1.user_id != u2.user_id;

これで、距離の計算をより正確に行うことができます。これは、距離をマイル単位で大まかに見積もる非常に単純な例にすぎません (高度なアルゴリズムでは、地球の形状が考慮されます)。この新しいテーブル user_distances に各ユーザー ID ペア間の距離が入力されたので、select where distance < 10 のような単純なクエリを実行できます。

これが役立つことを願っています。私はSQLをテストしませんでしたが、要点を理解する必要があります:)

于 2013-04-05T01:23:32.280 に答える
0

ええと、緯度 1 - 緯度 2 * 69 の距離について簡単にメモしておきます。

しかし、緯度と経度は同じではありません

経度については、* *53 が適切な推測です。

赤道から離れるほど、これらの機能は少なくなります (もちろん)

はい、USCG 認定の船長なので、経度と緯度理解しています。私たちは平らな地球に住んでいるわけではありません。

于 2015-03-24T18:15:04.377 に答える