【发布时间】:2020-04-23 12:28:59
【问题描述】:
我想获取一个名为 supplier_products 的表,其中包含以下列
ID Item_id supplier_id variant_id price lat lng serving_radius(in km)
1 1 2 12 22.00 26.11360000 85.39430000 1
2 1 3 12 44.00 26.11360000 85.39430000 4
3 1 2 13 25.00 26.11360000 85.39430000 4
4 1 3 13 23.00 26.11360000 85.39430000 4
现在用于搜索经纬度附近的供应商产品say($lat = 26.1136;$long = 85.3643;)。我正在使用这个查询
SELECT *, (6371 * acos(cos(radians('$lat')) * cos(radians(lat)) * cos( radians(lng) - radians('$long')) + sin(radians('$lat')) * sin(radians(lat)))) AS distance FROM supplier_products HAVING distance <= serving_radius ORDER BY distance")
上述查询返回为输入$lat & $long 提供服务的所有行。
但现在我只想返回那些具有不同 variant_id 的行的所有列,这些行提供输入 $lat & $long
我尝试使用GROUP BY -
SELECT *, (6371 * acos(cos(radians('$lat')) * cos(radians(lat)) * cos( radians(lng) - radians('$long')) + sin(radians('$lat')) * sin(radians(lat)))) AS distance FROM supplier_products GROUP BY variant_id HAVING distance <= serving_radius")
但它消除了一些所需的行,因为GROUP BY 在HAVING 子句之前执行。因此,它消除了服务半径内的一些必需行。
我正在使用PHP & MYSQL
编辑-我想要这个作为我的输出
ID Item_id supplier_id variant_id price lat lng serving_radius(in km)
2 1 3 12 44.00 26.11360000 85.39430000 4
3 1 2 13 25.00 26.11360000 85.39430000 4
ID-1 的行不提供输入 $lat/$long
但我的尝试给出了以下结果 -
ID Item_id supplier_id variant_id price lat lng serving_radius(in km)
3 1 2 13 25.00 26.11360000 85.39430000 4
因为GROUP BY 消除了2nd row
【问题讨论】:
-
如果你能提供一个 sql fiddle 会很有帮助
-
我不明白只有那些具有不同 variant_id 的行的所有列服务...请edit您的问题显示您想要的结果示例。
-
我已经用我的实际数据库值和我需要的输出编辑了这个问题
-
@O.Jones 用你提供的小提琴我得到了想要的输出。感谢您的努力,您能解释一下您使用的查询吗?
标签: php mysql database geospatial