Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql bergabung dengan tabel itu sendiri

select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
from metatdatatable t1, metadatatable t2
where t1.meta_key = "_wp_field1"
and t2.post_id = t1.post_id
and t2.meta_key = "_wp_field2"

Sunting

...untuk menggunakan ini sebagai dasar untuk kal lat/long tahun, Anda dapat membuat tabel temp, atau menggunakan hasil sebaris dengan kueri yang mirip dengan (kalkulasi DISTANCE yang disederhanakan) di bawah

select d1.post_id, d1.distance
from
(select r1.post_id, ABS($lat - r1.lat) + ABS($lon - r1.lon) as DISTANCE
from (select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
    from metatdatatable t1, metadatatable t2
    where t1.meta_key = "_wp_field1"
    and t2.post_id = t1.post_id
    and t2.meta_key = "_wp_field2") as r1
) as d1
where d1.distance <= 10
order by d1.distance ASC

catatan Anda mungkin ingin menerapkan filter kasar pada hasil bujur/bujur Anda sebelum melakukan perhitungan bujur/bujur 'mahal' pada hasil, atau sebelum menyimpan dalam tabel sementara. Idenya adalah mengabaikan semua hasil r1 dengan jelas di luar radius 10 mil.

Jika Anda menggunakan tabel temp, itu akan menjadi sesi khusus pengguna.

Edit 2

Lihat Bentuk Bumi untuk detailnya, tetapi pada dasarnya 7 menit lintang &bujur selalu lebih besar dari 10 mil, jadi jika lintang &bujur Anda dicatat dalam derajat, ini adalah 0,117 cukup dekat. Setiap poin yang berbeda lebih dari 0,117 dari target Anda tidak dapat berada di dalam radius 10 mil Anda. Ini berarti Anda dapat memfilter tabel r1 seperti :

(select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
        from metatdatatable t1, metadatatable t2
        where t1.meta_key = "_wp_field1"
        and t2.post_id = t1.post_id
        and t2.meta_key = "_wp_field2"
        and ABS(t2.meta_value - $lon) < 0.117
        and ABS(t1.meta_value - $lat) < 0.117
) as r1  

catatan Jika data Anda mencakup Greenwich Meridian, International Date Line, atau Khatulistiwa, ini tidak sepenuhnya benar. Dengan asumsi semua lat/bujur Anda untuk Amerika Utara, itu tidak akan menjadi masalah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbarui data ke database mysql dengan mengklik tautan

  2. MySQL ISNULL () Dijelaskan

  3. Nilai bidang yang dihitung berdasarkan kolom lain saat penyisipan

  4. pdo menyiapkan pernyataan dengan wildcard

  5. Bagaimana cara menyimpan informasi db connect yang aman?