sql >> Databasteknik >  >> RDS >> Mysql

mysql join-tabell på sig själv

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"

Redigera

...för att använda detta som grund för yr lat/long calc kan du antingen skapa en temporär tabell eller använda resultaten inline med en fråga som liknar (förenklad DISTANCE calc) nedan

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

OBS! du kanske vill använda ett grovt filter på dina lat/long-resultat innan du gör den "dyra" lat/long-beräkningen på resultaten, eller innan du lagrar i en temptabell. Tanken skulle vara att ignorera alla r1-resultat tydligt utanför en radie på 10 mil.

Om du använder en tillfällig tabell kommer den att vara användarsessionsspecifik.

Redigera 2

Ta en titt på Shape of the Earth för detaljer, men i huvudsak är 7 minuter lat &longitud alltid större än 10 miles, så om dina lat &longs registreras i grader är detta 0,117 nära nog. En punkt som skiljer sig mer än 0,117 från ditt mål kan inte vara inom din 10 mils radie. Det betyder att du kan filtrera r1-tabellen som :

(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  

OBS! Om dina data sträcker sig över Greenwich Meridian, International Date Line eller Ekvator, kommer detta inte att vara strikt korrekt. Om du antar att alla dina lat/longs är för Nordamerika kommer det inte att vara ett problem.



  1. Hur man hanterar MySQL-tidszon i skript

  2. Vad är Microsoft Access? En kort introduktion för nya användare

  3. Juli 2016 PSU misslyckas med att göra isqora

  4. hur man undviker avgränsaren från kolumninnehållet vid export av csv