sql >> Database >  >> RDS >> Mysql

Krijg resultaten die binnen de markeringsradiussen vallen uit de database

Om dit op te lossen, moet je de vergelijking van de cirkel begrijpen, wat ongeveer zo is.

(x-x1)^2 + (y - y1)^2 <= r^2

where a^b = a to the power b

Hier in uw geval zijn de gebruikers B (breedtegraad, lengtegraad) het middelpunt van de cirkel, die van gebruiker A (breedtegraad, lengtegraad) zijn de punten (x,y) en straal =2 km.

Maar het basisprobleem is het veranderen van breedtegraden naar lengtegraden, dus hier is de oplossing, 1 graad =111,12 km. Dus om de eenheden aan beide kanten van de vergelijking gelijk te houden, zullen we deze converteren naar Kms

Dus onze laatste vergelijking wordt:

((x-x1)*111.12)^2 + ((y-y1)*111.12)^2 = 4      (=2^2) 

SQL-instructie voor hetzelfde zou er ongeveer zo uit moeten zien

SELECT A.user_id, A.radius_id, A.latitude, A.logitude
FROM UserA AS A, 
     (SELECT user_id, latitude, longitude 
       FROM UserB 
       WHERE user_id = 8) AS B
WHERE (POW((A.latitude-B.latitude)*111.12, 2) + POW((A.longitude - B.longitude)*111.12, 2)) <= 4
/* **Edit** Here I have used (A.longitude - B.longitude)*111.12, for more accurate results one can replace it with (A.longitude - B.longitude)*111.12*cos(A.latitude)) or (A.longitude - B.longitude)*111.12*cos(B.latitude)) 

And, as i have suggested in the comments that first filter some records based on approximation, so whether one uses A.latitude or B.latitude it will not make much difference */

Ik hoop dat dit zal helpen...



  1. Is er een manier om een ​​db-relatie (pk/fk) te behouden in het volgende scenario?

  2. Een ContentDocument aan een aangepast Salesforce-object toevoegen

  3. Hoe kan ik een SQL Stored Procedure aanroepen met EntityFramework 7 en Asp.Net 5.

  4. Een CSV importeren naar MySQL met een ander datumformaat