因为有分页功能,排序就出了问题了,最多只能排序第一页,翻页后,列表无法继续排序。请问有什么好方法可以解决先排序后翻页呢?
我是按获取当前位置与数据库经纬度计算后获得距离后,按最近的距离进行由近到远排序的,最多只能排序第一页,第二页是乱的。
如下:
第一页内容
列表 1 距离:1.5km 列表 2 距离: 2.5km ...
翻页后,第二页内容
列表 3 距离:5.5km 列表 4 距离:1.2km 列表 5 距离:7.2km 想要实现的效果如下
第一页内容
列表 1 距离:1.2km 列表 2 距离:1.5km ...
翻页后,第二页内容
列表 3 距离:2.5km 列表 4 距离:5.2km 列表 5 距离:7.2km
我是通过 MYSQL 查询语句获得商家经纬度,再获取当前位置两者计算出的距离,并把距离当作键,使用 ksort 进行排序,可只有第一页可以正常排序,而第二页就乱了。
请问,如何在第一页就把所有最近距离排序好,翻页后接着上一页继续排序。请问该怎么做呢?非常感谢!~
1
815lbh 2017-08-28 09:15:37 +08:00
能不能把你的语句大概发出来看看。
|
2
xiaozy OP @815lbh 感谢您的回复,大致就是,先用 select 查询数据表最后 limit 0,5,获取经纬度,纬度,经度...新键个空数组准备存放商家 ID,然后开始 while 循环数据,使用 getmapDistance 函数计算当前和商家经度的距离,把新键的空数组存放商家 ID 并等于距离,使距离变成主键,商家 ID 变成键值,再用距离主键进行 ksort 排序。查询语句太多了,大致就是我说的这些。。。说得有些乱,希望您能看懂。
|
3
b821025551b 2017-08-28 10:03:25 +08:00
计算距离直接在数据库里做不就好了,然后直接 order by distance。
|
4
Light3 2017-08-28 10:19:42 +08:00
我不知道你怎么存的..距离这种我没做过 我觉得如果 经纬度 各一列 已完全可以 between 给出一个经纬度的范围 然后再排序
|
5
xiaozy OP @b821025551b 感谢回复,距离是通过查询后获取字段名 map"经度,纬度"后再获取当前位置计算出来的,不知道如何从数据库里做,还望指教,T-T,谢谢!~
|
6
815lbh 2017-08-28 10:24:28 +08:00
|
10
b821025551b 2017-08-28 10:37:24 +08:00
|
11
cain 2017-08-28 11:15:15 +08:00 1
SELECT
id, lng, lat, (st_distance (point (lng, lat), point({dest_lng}, {dest_lat}) ) / 0.0111) AS distance FROM locations HAVING distance < 50 ORDER BY distance 类似这样,使用 mysql 内置 geo spatial functions Ref: https://dev.mysql.com/doc/refman/5.6/en/spatial-function-reference.html |
12
qianlv7 2017-08-28 14:44:13 +08:00 1
geohash 应该可以解决你的问题
|
13
MyDaLin 2018-02-03 10:25:30 +08:00
我收集了挺多分页实例的,有兴趣的朋友可以看看
http://www.sucaihuo.com/php/191-0-0-0 |