I want to query the five locations in the vicinity of two kilometers in the data table based on the longitude and latitude of the current location, if the query result does not have five locations, I want to expand the nearby range until the five locations are queried. I have come up with two solutions: the first solution is to use SQL statements completely... I want to query the five locations in the vicinity of two kilometers in the data table based on the longitude and latitude of the current location, if the query result does not have five locations, I want to expand the nearby range until the five locations are queried. I have come up with two solutions:
The first solution is to use SQL statements completely. if you use SQL statements completely, I don't know how to write this SQL statement,
The second solution is to first query and then judge in business integration. if five locations are not met, expand the nearby range and query again in the database until five locations are queried.
I don't know the efficiency of these two solutions. please give me some suggestions. Grateful.
Reply content:
I want to query the five locations in the vicinity of two kilometers in the data table based on the longitude and latitude of the current location, if the query result does not have five locations, I want to expand the nearby range until the five locations are queried. I have come up with two solutions:
The first solution is to use SQL statements completely. if you use SQL statements completely, I don't know how to write this SQL statement,
The second solution is to first query and then judge in business integration. if five locations are not met, expand the nearby range and query again in the database until five locations are queried.
I don't know the efficiency of these two solutions. please give me some suggestions. Grateful.
You cannot understand either of the two solutions.
Can't you simplify your logic first?
Your requirement is not equal to: query the last five locations. Why is it two kilometers or two kilometers away.
If you want to query the last five points, why do you need to consider the business judgment? can you simply use a Limit statement?
The second solution is feasible. it is fully implemented using SQL, which puts a lot of pressure on the database, and the efficiency of separate execution between the data layer and the business layer is high.
You need AutoNavi LBS cloud to meet your needs.
Try mysql's spatial coordinate database,
Create table 'SPA' ('id' int (11) not null AUTO_INCREMENT, 'name' varchar (32) default null, 'loc 'point default null, /* ^ ---------------------------------- save the latitude and longitude */primary key ('id '))
/* Query */SELECT * FROM spa where distance (POINT ($ current longitude, $ current latitude), loc) <($ DISTANCE (in meters)/111195) LIMIT 5; /* ^ ----- unit: degree ^ --- 1 degree */
If you want to sort, you can order distance.
You need to use GEOHASH to convert two-dimensional coordinates into strings and then compare