gpt4 book ai didi

php - MySQL ORDER BY 最近的区域

转载 作者:行者123 更新时间:2023-11-30 23:10:01 25 4
gpt4 key购买 nike

基本上我必须得到算法来显示所选区域和其他区域的餐厅,这实际上是有意义的..

例如:如果我的区域在某个城市的北部,我想在北部显示餐馆,然后移动到中心,然后向东,然后向西,最后到极端的对面,即南部

如果是东,然后是中、北、南,最后是​​极端对立的,即西

我的数据库中有以下内容

带 ID 的区域表,1 - 北,2 - 东,3 - 西,4 - 南,5 - 中。

每个城市和结构的地点/区域表如下

地区编号 |地区名称 | zone_id(FK)

我有我的模型(php/codeigniter)

$this->db->select('menu_item.restaurant_id, menu_item.price, localities.locality_name, restaurant_information.restaurant_name, restaurant_information.restaurant_address, restaurant_information.is_halal, restaurant_information.cuisine, restaurant_information.city, restaurant_information.pincode');
$this->db->from('menu_item');
$this->db->where('menu_item.dish_id', $dish_id);
$this->db->where('menu_item.is_active', 1);
$this->db->where('restaurant_information.is_active', 1);
$this->db->join('restaurant_information', 'menu_item.restaurant_id = restaurant_information.restaurant_id');
$this->db->join('localities', 'restaurant_information.locality_id = localities.locality_id');

如果我有太多的连接或其他什么也没关系..但绝对不是纬度/经度或谷歌地理..

请帮帮我..我试过 order_by_field..没问题,但我不能动态地给它..

有什么解决办法还是我走错了方向..?如果我的结构有误,请纠正我......!

如果可以在结果对象上按部分排序,我也准备好了,我可以在结果对象中获取结果并根据位置对其进行排序……但我更喜欢 MySQL 来完成这项工作。提前致谢

最佳答案

基本上,如果我理解得很好,您想按最近的区域排序。

所以也许你应该将你的 ids 1、2、3、4、5 转换成如下坐标:

  • 1 北:x:0,y:1
  • 2 东:x:1,y:0
  • 3 西:x:-1,y:0
  • 4 南:x:0,y:-1
  • 5 中心:x:0, y:0

然后根据计算的距离对它们进行排序。


示例:您位于西部,您在西部、北部、南部和中部都有餐厅

如果您有坐标,您可以计算距离,然后对结果进行排序:

  • 西餐厅距离0
  • 北餐厅距离 1.2xxx(差不多)
  • 南餐厅距离 1.2xxx(差不多)
  • 中心餐厅距离 1

因此,假设您已经实现了 GET_DISTANCE()GET_COORD() 函数

SELECT
menu_item.restaurant_id
, menu_item.price
, localities.locality_name
, restaurant_information.restaurant_name
, restaurant_information.restaurant_address
, restaurant_information.is_halal
, restaurant_information.cuisine
, restaurant_information.city
, restaurant_information.pincode
FROM menu_item
JOIN restaurant_information
ON (menu_item.restaurant_id = restaurant_information.restaurant_id)
JOIN localities
ON (restaurant_information.locality_id = localities.locality_id)
WHERE TRUE
AND menu_item.dish_id = $dish_id
AND menu_item.is_active = 1
AND restaurant_information.is_active = 1
ORDER BY
GET_DISTANCE(
GET_COORD($my_position)
, GET_COORD(restaurant_information.locality_id)
)
;

关于php - MySQL ORDER BY 最近的区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com