如何解决如何使用在 createQueryBuilder() 中用作 where 的Haversine 公式计算对象 ManyToOne
我在计算产品促销时遇到问题。基本上,我有一个给定的位置。对于她,我使用半正弦公式来搜索所有合适的促销活动并向其中添加产品。一切都是按产品分组的,所以我只能展示产品,而不是所有的促销活动。一切正常,直到我希望每个产品返回它有多少促销。当然,它会返回,但所有促销活动都固定在它上面,我只想从查询所基于的位置知道促销活动的数量。
产品没有位置。这里的重点是我需要从该位置搜索促销并将它们分组到它们所属的产品中。如果碰巧同一个产品有 3 个促销,我想得到一个附加促销的产品的结果,但只有在这个位置的那些,而不是所有的附加到产品上。
我希望有人能理解我的意思。我不擅长自定义查询 - 我已经尝试了几乎所有的东西。
我想在 where 中添加一个半正弦公式的质量,但我完全不知道如何咬它,我的查询如下。
$query = $queryBuilder
->select("p.id,p1.status,p.details,COUNT(p1.id) AS promoCounter")
->addSelect("(6378 * acos(cos(radians(".$lat.")) * cos(radians(p1.lat)) * cos( radians(p1.lng) - radians(".$lng.")) + sin(radians(".$lat.")) *
sin(radians(p1.lat)))) AS distance")
->from(Products::class,"p")
->innerJoin(Promotion::class,"p1","WITH",("p.id = p1.product AND p1.status = 1"))
->groupBy("p.id")
->having("distance <= $range")
->getQuery();
;
当然,变量 lat 和 lng 是我在该地区寻找促销的位置。我找到了一切,但我无法从 mysql 查询中安排必要的结果。
谢谢大家!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。