0

クエリの最初の部分:

SET @centerLat = '48.531157';
SET @centerLng = '-123.782959';

SELECT user_id, lat, lng, ( 3959 * acos( cos( radians( @centerLat ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(@centerLng) ) + sin( radians( @centerLat ) ) * sin( radians( lat ) ) ) ) AS distance FROM bid_userloc HAVING distance < 25 ORDER BY distance LIMIT 0 , 20

2 番目の側面はuser_id、USERS テーブルから大量の情報を取得して取得することです。

私はまだ JOIN が何を意味するのかを学んでいますが、それがどのように最適に機能するのかよくわかりません...

4

3 に答える 3

0

あなたはこれを試すことができます

  SELECT user_id, lat, lng, ( 3959 * acos( cos( radians( @centerLat ) )
  * cos( radians( lat ) ) * cos( radians( lng ) - radians(@centerLng) )
   + sin( radians( @centerLat ) ) * sin( radians( lat ) ) ) ) 
   AS distance,columnsfromuserstable FROM bid_userloc bid
   inner join users us on bid.user_id=us.user_id 
    HAVING distance < 25
   ORDER BY distance LIMIT 0 , 20
于 2012-10-19T06:32:36.583 に答える
0

次のようなことを試すことができます:

select * from users where user_id in (select user_id from(

SELECT user_id, lat, lng, ( 3959 * acos( cos( radians( @centerLat ) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(@centerLng) ) + sin( radians( @centerLat ) ) * sin( radians( lat ) ) ) ) AS distance FROM bid_userloc HAVING distance < 25 ORDER BY distance LIMIT 0 , 20

));
于 2012-10-19T06:32:57.040 に答える
0

JOIN を使用したバリアント -

SET @centerLat = '48.531157';
SET @centerLng = '-123.782959';

SELECT
  t1.user_id, t1.lat, t1.lng,
  (3959 * ACOS(COS(RADIANS(@centerLat)) * COS(RADIANS(t1.lat)) * COS(RADIANS(t1.lng) - RADIANS(@centerLng)) + SIN(RADIANS(@centerLat)) * SIN(RADIANS(t1.lat)))) distance,
  t2.*
FROM
  bid_userloc t1
JOIN users t2
  ON t1.user_id = t2.user_id
HAVING
  distance < 25
ORDER BY
  distance
LIMIT
  0, 20;
于 2012-10-19T06:35:24.757 に答える