gpt4 book ai didi

php - 我将如何在 Laravel Eloquent 中执行这个存储过程和子查询 SQL?

转载 作者:行者123 更新时间:2023-11-29 06:37:59 24 4
gpt4 key购买 nike

我正在尝试执行下面的 SQL 语句,但我发现 Laravel Eloquent 语法对于使用存储过程和子查询的更复杂查询来说相当困惑。

我将如何执行以下操作?

$longitude  = (float) $longLat['longitude'];
$latitude = (float) $longLat['latitude'];
$radius = $distance; // in miles

$lng_min = $longitude - $radius / abs(cos(deg2rad($latitude)) * 69);
$lng_max = $longitude + $radius / abs(cos(deg2rad($latitude)) * 69);
$lat_min = $latitude - ($radius / 69);
$lat_max = $latitude + ($radius / 69);

SELECT get_distance_in_miles_between_geo_locations(51.666774,-1.92973, lat, lng) AS distance_from_input, domain FROM websites_lats_and_longs WHERE domain IN (SELECT domain FROM websites_lats_and_longs
WHERE (lng BETWEEN $lng_min AND $lng_max)
AND (lat BETWEEN $lat_min and $lat_max)) ORDER BY distance_from_input;

最佳答案

首先,我们来编写WHERE IN子查询

$range = DB::table("websites_lats_and_longs")
->select("domain")
->whereBetween("lng", [$lng_min, $lng_max])
->whereBetween("lat", [$lat_min, $lat_max])
->get();

接下来,编写使用存储函数的查询

$result = DB::table("websites_lats_and_longs")
->selectRaw(
"get_distance_in_miles_between_geo_locations(?, ?, lat, lng)"
, [51.666774, -1.92973])
->whereIn(["domain" => $range])
->orderBy("distance_from_input")
->get();

其中 DB::table("websites_lats_and_longs") 可替换为表的 Eloquent 模型。

关于php - 我将如何在 Laravel Eloquent 中执行这个存储过程和子查询 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52930851/

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