[英]Query MySQL database and display using variable from response
通過在 Stack Overflow 上閱讀這里,我做到了這一點。 我有一張滿是送貨中心的桌子。 表結構為:
name - name of hub
zip - zip code of hub
lng - longitude of hub
lat - latitude of hub
radius - delivery radius
我目前正在使用它來獲得最近的送貨中心:
$dist1 = '20';
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("SELECT name,
lat,
lng,
zip,
radius,
3956 * 2 * Asin(Sqrt(Power(Sin(( :lat - lat ) * Pi() / 180 / 2), 2) +
Cos(:lat * Pi() / 180) * Cos(
lat * Pi() / 180) *
Power(Sin(( :lng - lng ) * Pi()
/
180 / 2), 2))) AS dist
FROM hubs
WHERE lng BETWEEN ( :lng - :dist1 / Cos(Radians(:lat)) * 69 ) AND ( :lng +
:dist1 / Cos(Radians(:lat
)) * 69 )
AND lat BETWEEN ( :lat - ( :dist1 / 69 ) ) AND ( :lat + ( :dist1 / 69 ) )
HAVING dist < :dist1
ORDER BY dist
LIMIT 100 ");
$stmt->execute([
'lng' => $lng,
'lat' => $lat,
'dist1' => $dist1
]);
while ($row = $stmt->fetch()) {
if ($row['radius'] >= $row['dist']){
echo $row['name'];
echo " - ";
echo $row['zip'];
echo " - ";
echo $row['dist'];
echo "<br>";
}
}
我最希望從查詢中消除 $dist1 變量,而是僅顯示在該中心設置的半徑內交付的最近交付中心,僅使用 MySQL,而不是 PHP(就像我現在使用的那樣)。
我怎樣才能做到這一點?
很簡單,把你的 MySQL 改成這樣:
SELECT name,
lat,
lng,
zip,
radius,
3956 * 2 * Asin(Sqrt(Power(Sin(( :lat - lat ) * Pi() / 180 / 2), 2) +
Cos(:lat * Pi() / 180) * Cos(
lat * Pi() / 180) *
Power(Sin(( :lng - lng ) * Pi()
/
180 / 2), 2))) AS dist
FROM hubs
WHERE lng BETWEEN ( :lng - radius / Cos(Radians(:lat)) * 69 ) AND ( :lng +
radius / Cos(Radians(:lat
)) * 69 )
AND lat BETWEEN ( :lat - ( radius / 69 ) ) AND ( :lat + ( radius / 69 ) )
HAVING dist < radius
ORDER BY dist
LIMIT 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.