sql >> Database teknologi >  >> RDS >> Mysql

mysql join-tabel på sig selv

vælg t1.post_id, t1.meta_value som lat, t2.meta_value som lon fra metatdatatabel t1, metadatatabel t2hvor t1.meta_key ="_wp_field1"og t2.post_id =t1.post_w_id og t2" /kode> 

Rediger

...for at bruge dette som grundlag for yr lat/long calc, kan du enten oprette en midlertidig tabel eller bruge resultaterne inline med en forespørgsel svarende til (forenklet DISTANCE calc) nedenfor

vælg d1.post_id, d1.distancefrom(vælg r1.post_id, ABS($lat - r1.lat) + ABS($lon - r1.lon) som DISTANCEfrom (vælg t1.post_id, t1.meta_value som lat, t2.meta_value som lon fra metatdatatabel t1, metadatatabel t2 hvor t1.meta_key ="_wp_field1" og t2.post_id =t1.post_id og t2.meta_key ="_wp_field2") som r1) som d1 hvor d1. af d1.distance ASC 

NB. du vil måske anvende et groft filter på dine lat/long resultater, før du laver den 'dyre' lat/long beregning på resultaterne, eller før du gemmer i en temp-tabel. Ideen ville være at ignorere alle r1-resultaterne klart uden for en radius på 10 mil.

Hvis du bruger en midlertidig tabel, vil den være brugersessionsspecifik.

Rediger 2

Tag et kig på Shape of the Earth for detaljer, men i det væsentlige er 7 minutter lat &longitude altid større end 10 miles, så hvis dine lat &longs er registreret i grader, er dette 0,117 tæt på nok. Ethvert punkt, der afviger mere end 0,117 fra dit mål, kan ikke være inden for din 10 mile radius. Dette betyder, at du kan filtrere r1-tabellen som :

(vælg t1.post_id, t1.meta_value som lat, t2.meta_value som lon fra metatdatatabel t1, metadatatable t2 hvor t1.meta_key ="_wp_field1" og t2.post_id =t1.post_id og t2 "_wp_field2" og ABS(t2.meta_value - $lon) <0,117 og ABS(t1.meta_value - $lat) <0,117) som r1

NB. Hvis dine data spænder over Greenwich Meridian, International Date Line eller Ækvator, vil dette ikke være strengt korrekt. Forudsat at alle dine lat/longs er for Nordamerika, vil det ikke være et problem.



  1. MySql-forespørgselshistogram til data om tidsintervaller

  2. Ekskluder linjeresultater, der har NULL-værdi i et hvilket som helst felt?

  3. Hvad er underforespørgsler i oracle

  4. INSERT hvis ikke Exist Mysql